实例介绍
一份有利于初学者认识学习PIC单片机的文件。
TRSD=0X00;/)向寄存器设为输出 PORTD=0XO1 PORTD=0X00;/端口寄存器设为输出低电平 PORTD= PORTD<<1;/低位右移一位 TRISC=0X00 Delayo;/500ms,请自定义于头文件 Void minot PORTO=0X00;拉低C口 While(1) 11-1: ADCONO REGISTER(ADDRESS 1Fh) RW-0 R/W-0 R-0 RW-0 R-0 R-0 U-0 R-0 ADCS1 I ADCSO CHS2 CHS1 CHSO GO/DONE ADON bit 7 bit o bit 7-6 ADCS1: ADCS0: A/D Conversion Clock Select bits(ADCONO bits in bold) ADCON1 ADCONO Clock Conversion <ADCS2><ADCS1: ADCSO> 00 FoSc/2 01 Fosc/8 00001111 10 Fosc/32 11 FRc(clock derived from the internal A/D RC oscillator) 00 FOsc/4 01 Fosc/16 10 Fosc/64 11 FRc(clock derived from the internal A/D RC oscillator) bit 5-3 CHS2: CHS0: Analog Channel Select bits 000= Channel O(ANO) 001= Channel 1(AN1) 010= Channe2(A№2 011= Channel 3(AN3) 100= Channel 4 (AN4) 101 =Channel 5(AN5) 110 Channel 6 (AN6) 111 =Channel 7(AN7) Note: The PIC16F873A876A devices only implement A/D channels 0 through 4: the unimplemented selections are reserved Do 10-bit Result bit 2 GO/DONE: A/D Conversion Status b When ADoN= 1 ADFM =1 FMEO 1= AD conversion in progress(sett cleared by hardware when the a 0= AD conversion not in progress bit 1 Unimplemented: Read as 0 2107 0765 bit o ADON: A/D On bit 000000 000000 1= AD converter module is powered 0= AD converter module is shut-off ADRESH ADRESL ADRESH ADRESL ADCON中ADFM用来设定转换结果在 10-bit Result 10-bit Result ADRESH: ADRESL如何存放。ADHM=1结果右对齐, ADFM=0结果左对齐。如右图所示 比赛中AD转换结果只需要8位,可设ADFM=1,只读取 ADRESI的8位结果。PCFG3: PCFGOAD转换引脚功能选 择位,用来设置AD转换引脚的工作模式(模拟功能、数字IO功能)和转换的基准电压来源。 ADCON I寄存器具体设置如下 --笔记区 REGISTER 11-2: ADCON1 REGISTER (ADDRESS 9Fh) RW-0 RN-O u-0 RN-0 R/-0 R/W-o RN-O ADFM ADCS2 PCFG3PCFG2PCFG1PCFGO bit o bit 7 ADFM: A/D Result Format select bit 1= Right justified. Six(8)Most Significant bits of ADRESH are read as o 0=Left justified. Six(6)Least Significant bits of ADRESL are read as o bit 8 ADCS2: AD Conversion Clock Select bit(ADCON1 bits in shaded area and in bold ADCON1 ADCONO Clock Conversion <ADCS2><ADCS1: ADCSO> 00 FOSC/2 01 FOSc/8 10 FOSc/32 11 FRC(clock denved from the internal AD RC oscillator) 0 FOSC/4 FOSC/16 10 FOSC/64 11 FRC(clock derived from the internal AD RC oscillator) bit 5-4 Unimplemented: Read as o' bit 3-0 PCFG3: PCFG0: A/D Port Configuration Control bits PCFG :0 AN7 AN6 AN5 AN4 AN3 AN2 AN1 ANO VREF+ VREF.C/R 0000 VDD VSS/ 0001 VREF AN3 Vss 7/1 0010 D D D AVDD VSS5/ 0011DD AVREF A AA AN3 Vss4/ 100 D D D A VDD VS93/0 0101 DD D D VREF+ D A AN3 VsS2/ 011xD D D D D ADAAA 0/0 1000A VREF+ VREF. AN3 AN26/ 1001 DDAA A VDD VSS/0 1010D D VREF+ AN3 Vss/ 1011DD VREF+ VREF. A AN3AN24/ 1100D0|D A VREF+ VREF. A A AN3 AN23/ 1101 D DD VREF+ VREF. AA AN3 AN22/ 1110DD D D D D D A VDD VSs/0 1111 D DD D VREF+ VREF. D A AN3 AN21 b、AD模块使用流程如下: 模拟输入引脚的设置, TRISA. TRISE的设置 己设置AD模块主要是 ADCON1、 ADCONI0的设置 设定模拟引脚/参考电压/数字I0口的设置( ADCON 选择AD输入通路( ADCONO) ·选择AD转换时钟( ADCON0) ·接通AD模块( ADCON0) 设置AD中断(如果需要,这 使用中断,所 对ADIF位清零 以无护不需设置。 对ADE位置1 对GIE位置1 3,0:等待所要求的采集时间19.72ug 4,0;开始转换 ·将 GO/DONE位置1( ADCON0) 5.等待AD转换完成,既可通过: 。探询 GO/DONE被清零使用 while(G0==1)来实现 6,读AD结果寄存器( A DRES),这里我们使用8位结果,如;ADFM=1,只读取 ADRESL中数据 7,对下一个转换,就继续步骤3,但在下个转换开始前需间隔2TAD的时间。 TABLE 11-2: REGISTERS/BITS ASSOCIATED WITH A/D 3、和AD有关的寄存器及初始 Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit o 化如左图: 0Bh. 8Bh, NTcoN GIE PEIE TMROIE INTE RBIE TMROIF INTF RBIF思考:AD怎样初始化? 10Bh. 18Bh PIR1 PSPIFl1 RCIFTXIF SSPIF CCP1IFTMR2IFTMR1IF 8ch PIE1 PSPIE们 RCIE TIE SSPIE CCPlIETMR2IETMR1IE 1Eh ADRESH A/D Result Register High Byte 9Eh ADRESL A/D Result Register Low Byte 1Fh ADCONO ADCS1 ADCSO CHS2 CHS1 CHSO GO/DONE ADON 9Fh ADCON1 ADFM ADCS2 - PCFG3 PCFG2PCFG1 PCFGO TRISA PORTA Data Direction Register 05h PORTA PORTA Data Latch when written PORTA pins when read 89h1) TRISE oBF旧Bo| PSPMODE PORTE Data Direction bits 09h() PORTE RE1 REO 三、电机控制模块 目的:控制小车车轮方向及调节车轮速度 1、怎样调速控制电机? 庄 A、引导 期 单片机调速控制电机就如同流水带动水车,水流大,水车转速快,如果 我们让水流断断续续流动,那么水车也会流断断续续转动,这是我们宏观上看见1 的现象,微观地看,应用在电机上,只是电机转动有惯性,我们看不出它断断续 续的转动。 可以看出我们也能用断断续续的有一定频率的电压脉冲信号去控制电机 时间 的转动。其频率f=1/T,T为周期,Tr为运行周期,也就是驱动电机的高电平 持续时间。占空比=Tr/T 如右图: 周期T B、怎样产生周期时间T Timer2定时器就可以产生这个周期时基T我们使用它工作在定时器模式下,包含的寄存器有T2CON、PR2、TMR2 个 TMR2寄存器是可读可写的,任何单片机复位都将对其清0,它是用于存放计数值的,定时器工作在定时器模式下, 只能使用内部时钟来触发增量,在一定的(指令周期)时钟频率下从OOH递增的(就比如现实中钟表的秒针一样,不 停一走)。 PR2是周期寄存器,我们可以给它赋一个合适的值,TMR2寄存器的值同PR2寄存器的值相等时,(如果中断使能, 就会响应中断)TMR2的值就会清0,又从00H开始下一个循环。(这里就好比我们给钟表定闹钟一样)。PR2也是可 读写的,对它赋新值,要到下一次TMR2匹配PR2后才会生效。但是,PR2被复位后会被填入初值FFH T2CON寄存器是 Timer2的控制寄存器,它包括预分频和后分频的设置,还有就是 Timer2的使能位TMR2ON。 关于预分频(有三种选择1:1,1:4,1:16),前几节说过程序执行有个指令周期,这个预分频就是将指令周期的频 率分成几分之几,来触发TMR2的增量,分频的效果是频率小了周期大了,那样上图一个脉冲信号持续时间变长了。 对于后分频,我们不使用中断,可以对它不进行设置,保持默认0状态。T2CON寄存器如下: -------------------- 创新区知识:无线技术、红外线技术 ER 7-1: T2CON: TIMER2 CONTROL REGISTER (ADDRESS 12h) U-0 R-0 RW-0 RW-0 RW-0RW-0 R-0 R/W-0 I-TOUTPS3TOUTPS2TOUTPS1TOUTPSO TMR20N T2CKPS1T2CKPSO bit 7 bit o bit 7 Unimplemented: Read as 0 bit 6-3 TOUTPS3: TOUTPSO: Timer2 Output Postscale Select bits 0000=1:1 Postscale 0001=1: 2 Postscale 0010=1: 3 Postscale 1111=1:16 Postscale bit 2 TMR2ON: Timer2 On bit 1= Timer2 is on 0=Timer2 is off bit 1-0 T2CKPS1: T2CKPSO: Timer2 Clock Prescale select bits 00= Prescaler is 1 01= Prescaler is 4 1x= Prescaler is 16 这样设置好PR2的值,周期T就设定了。和 Timer2有关的寄存器如图: TABLE 7-1: REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER Address: Name: Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit o 0Bh, sBh, INTCON GIE PEIE TMROIE INTE RBIE TMROIF INTF RBIF 0 10Bh. 18Bh oCh PIR1PSPIF(I) ADIF RCIF TXIF SSPIF CCPlIF TMR2IF 0 8Ch FIE PSPIE()ADIE RCIE TXIE SSPIE CCPlIE TMR2IE TMR1IE 0 11h TMR2 Timer2 Modules Register 12h T2CON TOUTPS3TOUTPS2TOUTPS1TOUTPSO TMR2CNT2CKPS1! 92h FR2 Timer2 Pericd Register 思考: Timer2怎样初始化? C、怎样输出运行周期间的高电平 这由单片机的CCP模块的PWM( Pulse width modulation)模式实现,CCP工作在PWM模式,需要 设定 CCPICON=0XOC和CCP2CON=0X0C,并且CCP的两引脚也要设置为输出,即 TRISO<1:2>位的设 定。PWM模式有 CCPRXL、 CCPRXH寄存器 CCPRXL寄存器是用于存放运行周期Tr的值。在 Timer2从0开始增量的过程中,TMR2的值会不停 地和 CCPRXL的值进行比较(比较器中),刚开始时时Cl、C2输出高电平,直到TMR2的值等于 CCPRXL 的值时,Cl、C2输出低电平,TMR2会再增下去,到等于PR2的值时,TMR2值清0,开始下一个循环 重新计数。当 CCPRXL的值超过PR2的值时,就会一直输出高电平。 CCPRXH是个只读寄存器(就是我们不能操作的寄存器),其实当我们给 CCPRXL赋值后, CCPRXI 会把这个值加载到 CCPRXH,供PWM的比较器使用,所以它是 CCPRXL的内部缓冲寄存器。 设定CCP模块为PWM运行的可采用下面几步: 1通过写向PR2寄存器将PWM周期置位。 2通过写入 CCPRII寄存器和CCP1C0N(5:4)位将PWM运行周期 3通过对 TRISC(2〉位清零将CCP引脚变为输出。 4通过写入T200N将TMR2预分频值和 Timer2使能置位。 5为PM运行设定CCPl模块。 CCPXCON=0Xc1或2 和PWM、 Timer2有关的寄存器也有几个即: Address Name BIt7 Blt6 BIt 5 BIt 4 Bit 3 BIt 2 BIt 1 BIt O CBn,8Bh, INTCON GIE PEIE TMRDIEINTERBIEiTMROIFINTF RB F 10B. 18Bn aCh PIR1 PSPIF ADF RCIF TXIF SSPIF CCPlIFTMR2IFTMR1IF aDh PIR2 CCP2IF 8Ch PIE1 PSPIE( ADIE RCIE TXIE SSPE: CCP能TR2TR1 8Dh PIE2 CCF2IE 87h TRISC PORTC Data Drect cr Register 11h TMR2 Timer2 Module's Register 92h PR2 Tmer2 Modules Perod Reg ster 12h T2CON TOUTPS3 TOUTPS2 TOUTPS1 TOUTPSO TMR2ON T2CKPS1T2CKPSO 15h CCPR1L Capture Compare/ PM Register1 (LSB) 16h CCPR1H CaptureiCcmpare/PwM Register1(MSB) 17h CCP1CON CCP1X CC1YCCP1M3 CCP1M2 CCP1M1CCPMO 1En CCPR2- Capture/Compare/ M Register2 (LSB) 1Ch CCPR2HCeptureiCamperePWWMRegjister2(M1SB) lDh CCP2CON CCP2X CC22YCCP2M3 CCP2M2 CCP2M1CCP2MO 思考:那么PWM怎样初始化?: 四、 Proteus仿真软件和 maplab编译环境介绍 1、怎样安裝 Proteus和 mplab、怎样使用 Proteus软件进行仿真操作、怎样编制程序? 五、实例分析 1、D口、C口驱动电机仿真分析2、AD模块仿真分析3、Pwm模式仿真分析 附表: master clear(RESET) input waRN→ 40 --RB7PGD tnCirout Debuger pin A/D RAO/AND- 2 RB6/PGC In-Circuit Debugger pin AD RAl/AN1- 3 38 PRB R(SP control read) A/D RA2/AN2NREF 37口一RB4 ADDRESS 3 AD RA3AN3MREF口5 -RB3/PGM ADDRESS 2 Cs(slave-like. PSP select RA4TcK□6 35RB2 ADDRESS 1 AD RA5AN4S←-口7 34口RB1 ADDRESS 0 AD REO/RDIANS→8 33口→RB0NT INTERRUPT RE1wRA6+国9 POSITIVE supply for logic AREA+日0N3日 GROUND reference for logic POSITIVE supply for logic VD GROUND reference for logic vas→日2旨2日*R8FsPa oscillator crystal input OSC1/CLKIN.→ 28日→ RDS/PSP58tbs oscillator crystal output osc2/ CLKOUT+日14 27日→RD4PsP48tbus RcoT1oso1cK→口15 26日一Rc7 /RXDT USART recie PWM RC/ OSI/CCP2→日16 25日→ RC6/XCK USART transmit PWM RC2/CCP1 CRCS/SDO W(PSP control wnte) 12C clock RC3scsc日1823日→ RCA/SDUSDAl2C data vO B-bit bus RDO/PSPD++019 22口一RD3PsP38bbus 8-bit b RD1/PsP1“口20 21口RD2PsP28bus 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论