首页编程pic单片机编程入门,c语言用什么编程软件

pic单片机编程入门,c语言用什么编程软件

编程之家2026-05-261125次浏览

大家好,今天小编来为大家解答以下的问题,关于pic单片机编程入门,c语言用什么编程软件这个很多人还不知道,现在让我们一起来看看吧!

pic单片机编程入门,c语言用什么编程软件

PIC单片机编程的问题 刚学 不太懂

;实例供参考可以直接仿真,多看看实例会有帮助的。

;*********************************************************************

;* GPIO0-V GPIO1-I GPIO2-LED1 GPIO4-LED2 GPIO5-OUT*

;* GPIO3-10K*

;*********************************************************************

LISTP=12F675

pic单片机编程入门,c语言用什么编程软件

INCLUDE"P12F675.INC";包含MPLAB预定义的头文件

__CONFIG(0x3FC4);11---111001000设定配置字信息

;_CPD_OFF&_CP_OFF&_BODEN_ON&_MCLRE_OFF

;关代码-数据保护,掉电复位使能,内部复位,

;_PWRTE_ON&_WDT_OFF&_INTRC_OSC_NOCLKOUT

;上电复位延时使能,关看门狗,内部振荡无时钟输出

pic单片机编程入门,c语言用什么编程软件

;*************************************************

;*寄存器定义及RAM分配*

;*************************************************

ERRORLEVEL-302;编译输出结果中不要显示message

cblock0x20;通用变量定义从该地址开始

W_TEMP;中断服务程序用来临时保存W和STATUS

STATUS_TEMP

FLAGS;程序要使用的状态标志寄存器

PWM_HIGH:2;新的PWM高电平时间,保留两个字节

PWM_LOW:2;新的PWM低电平时间,保留两个字节

PWM_HIGH_CURRENT:2;当前PWM的高电平时间锁存

PWM_LOW_CURRENT:2;当前的PWM低电平时间锁存

COUNTER;AD采样次数计数

adsum:2;16位的AD累加结果,用于平均运算,两个字节

temp:2;用于数学运算的临时变量,两个字节

endc;结束cblock变量定义

count EQU 38H

result EQU 39H

;************************************************

;I/O引脚初始化*

;以及A/D初始化*

;************************************************

;GP0=模拟电压输入

;GP1=没有使用

;GP2=没有使用

;GP3=只能作为输入,连接10K下拉电阻到地,ICSP烧录会使用该引脚

;GP4=PWM1输出引脚

;GP5=PWM2输出引脚

;/***************/代换定义

#definePWM_OUTPUT GPIO,2;GPIO,4

#defineLOAD_PWM FLAGS,0

#defineCALCULATE_AD FLAGS,1

#definePWM_TICKS.1024;PWM时间片的个数,如果PWM的分辨率是10位,

#defineTEST_PWM_HIGH.512;用于测试的50%占空比,高电平时间等于PWM时间片的一半

#defineTEST_PWM_LOW PWM_TICKS-TEST_PWM_HIGH;低电平时间等于PWM时间片减高电平时间

#defineISR_DELAY.16;从Timer1溢出到进入中断重新装载Timer1值的延时,

;可通过软件模拟来确定该值

#defineNUM_AD_SAMPLES.16;AD采样次数

#defineAD_TIME_INTERVAL.10;0xFF-(.245) AD时间间隔,10个cycle的循环

;/***************/定义双字节常数减变量的宏

;const_input-input=output

sub_const_16macroconst_input,input,output

movlw lowconst_input;W=low双字节常数 L

movwf temp

movlw highconst_input;W=high双字节常数H

movwf temp+1

movf input,w;W=input

subwf temp,w;W=temp-W

movwf output;output=W

movf input+1,w;W=input+1

btfss STATUS,C;C=1->

incf input+1,w;W=input+1+1

subwf temp+1,w;W=temp+1-W

movwf output+1;output+1=W

endm

;/***************/定义双字节常数加变量的宏

;const_input+input=output

add_const_16macroconst_input,input,output

movlw lowconst_input;W=low双字节常数 L

movwf temp

movlw highconst_input;W=high双字节常数H

movwf temp+1

movf input,w;W=input

addwf temp,w;W=temp+W

movwf output;output=W

movf input+1,w;W=input+1

btfsc STATUS,C;C=0->

incf input+1,w;W=input+1+1

addwf temp+1,w;W=temp+1+W

movwf output+1;output+1=W

endm

;/***************/程序开始

;/***************/

org 0000H;芯片复位入口地址0x00

goto MAIN000;主程序

;/***************/中断服务子程序

;/***************/

;INTCON,T0IF---TMR0溢出 INTCON,INTF---GP2/INT外部中断

;INTCON,GPIF---GP5-GP0引脚电平发生了变化

;PIR1,EEIF---EEPROM写操作完成 PIR1,ADIF---A/D转换完成

;PIR1,CMIF---比较器输入已改变 PIR1,TMR1IF---TMR1溢出

org 0004h;中断入口地址0x0004

INTCON00 movwf W_TEMP;W_TEMP=W保存

swapf STATUS,W;STATUS_TEMP=STATUS

movwf STATUS_TEMP

bcf STATUS,RP0;选择Bank0

INTCON02 movlw b'00000100';把W的第四位置高,其他都是零

xorwf GPIO,F;和GPIO异或,也就是把PWM输出脚的电平反转

;判断中断种类

INTCON03 bcf PIR1,TMR1IF;清T1中断标志Timer1中断

movlw HIGH3CAFH;Timer1=50mS C350H

movwf TMR1H;FFFFH-C350H=3CAFH

movlw LOW3CAFH

movwf TMR1L

bsf CALCULATE_AD;置位A/D转换标志

bsf LOAD_PWM;置位PWM标志

INTCON08 swapf STATUS_TEMP,W;恢复STATUS寄存器

movwf STATUS

swapf W_TEMP,F;恢复W寄存器

swapf W_TEMP,W

retfie;从中断返回

;/***************/主程序

;/***************/

MAIN000 clrf GPIO;初始化GPIO端口寄存器为零

bsf STATUS,RP0;选择Bank1

call 0x3FF;读内部振荡出厂校准字,返回值在W寄存器内

movwf OSCCAL;内部振荡器校准

movlw b'11000011';设置GP<0>为输入,所有其他口为输出

movwf TRISIO

movlw 01h;使能Timer1中断01h

movwf PIE1

movlw b'00010001';AD采用FOSC/8时钟,GP2是模拟口,

movwf ANSEL;其他口为数字IO

movlw b'00001000';Timer0设置为使用内部指令周期,无预分频

movwf OPTION_REG

bcf STATUS,RP0;选择Bank0

movlw b'10000001';A/D是右对齐格式,Vdd为参考,GP0作为AD输入口

movwf ADCON0

movlw b'00000111';关掉内部比较器,让比较器的输入都为数字口

movwf CMCON

movlw 0C0h;使能周边外设中断和全局中断

movwf INTCON

movlw b'00000001';Timer1是1:1预分频,内部时钟源,

movwf T1CON;振荡频率/4,不带门控

movlw.16;AD次数=10

movwf COUNTER

MAIN010 btfss CALCULATE_AD;=1->主循环

goto MAIN010

bcf CALCULATE_AD;清A/D转换标志

bsf STATUS,RP0;选择bank1

movf ADRESL,W;W=ADL

addwf adsum,F;adsum=ADL

btfsc STATUS,C;C=0->

incf adsum+1,F;adsum+1=adsum+1+1

bcf STATUS,RP0;选择Bank0

movf ADRESH,W;W=ADH

addwf adsum+1,F;adsum+1=ADH

bsf ADCON0,GO_DONE;启动AD下一次转换

decfsz COUNTER,F;转换计数器-1=0->

goto MAIN010;循环

movfw adsum

movwf result;result=w

CALL LED000

movfw adsum+1

movwf result;result=w

CALL LED000

movlw.16;AD次数=10

movwf COUNTER

clrf adsum;清A/D累加和/平均值寄存器

clrf adsum+1

goto MAIN010

;/***************/串行输出

LED000 movlw 8;串行输出8位w=8

movwf count;count=w

LED001 bcf TRISIO,4;清零

btfsc result,0;result.7=0->

bsf TRISIO,4;00100000

bsf TRISIO,5;产生时钟脉冲GP4=1

bcf TRISIO,5; GP4=0

RRF result,1;左移获取下一个结果位

decfsz count,1;-1

goto LED001;<>0循环下位

RETURN;=0

;/***************/

end;程序结束符

关于PIC单片机C语言编程

1:第一个问号:是;第二个问号:不一定;

2:一些C30有多种类型版本,你说的30C和36可能不是指同一种类型。

3:没破解的编译器过期就不能编译程序了。想用就需要重装(貌似它会在系统内记录的,所以应该是重装操作系统才行)。

4:肯定不可靠。我有过编译经历,破解的编译出来的在逻辑上就会有问题。但这不影响普通学生入门者做设计。如果你是做工业、航天领域设计的,你的领导也不会让你用破解版或者未注册版。所以现在很多单位宁愿用汇编来编译程序。

PICC有支持 PIC10/12/16/18/24/32系列单片机的C编译器。同时也支持dsPIC30/33系列DSC芯片的C编译器

PIC单片机编程的介绍

该书是“图解PIC单片机应用技术”丛书之一。本书以从未接触过微控制器的人为对象,把理解编程基本思路作为重点,分别介绍PIC微控制器的内部动作,编程过程分析,PIC微控制器数字量接口的应用,以及如何熟练使用内置设备、驱动电机等。附录部分给出PIC的开发步骤、向PIC微控制器写入程序、指令表、PIC16F877A等。该书图文并茂,实例丰富,内容循序渐进,具有很强的实用性。该书可供PIC单片机爱好者、高等院校相关专业师生,以及从事PIC单片机项目开发制作的工程技术人员阅读和参考。

OK,本文到此结束,希望对大家有所帮助。

php源码下载网站推荐(PHP源码下载)数据库建设(如何建立数据库)