




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
试验五 A/D转换一、 试验目的:1、 学习用单片机上的A/D模块实现电压或电流的测量方法2、 学习基于MPLAB用PICC进行编程和调试。二、 试验参考程序#include#include#includeextern void init_sys(void);extern void Display(void);unsigned int a;unsigned int b;unsigned int Num_t;unsigned int Num_one;unsigned int ADBUFF;unsigned int whole;void init_sys(void) /单片机初始化程序asm(CLRWDT);TRISA=0xff;TRISB=0xff;TRISC=0;TRISD=0;TRISE1=0xff;T1CON=0b0011001; /时钟源:Fosc/4;8分频;ADCON0= 0b10000101; /ADCON0和ADCON1的设置请参考教材ADCON1=0b00000100;/下面设置使能TMR1中断的三个使能控制位GIE=1;PEIE=1;TMR1IE=1;ADIE=1;Num_t=0;void interrupt interr(void) /这是中断子程序,其中“void interrupt”是专门申明中断子程/序类型的if(TMR1IF)TMR1IF=0; /清中断标志位 GODONE=1; /将ADCON0寄存器的GO/DONE位置1,启动A/D转换asm(CLRWDT); /这是一句在C程序中混编汇编程序的例子if(ADIF)ADIF=0;ADBUFF=ADRESH; /保存高8位AD结果 a=ADBUFF/51; /A=(ADRES/B11111111)*Vref=(ADRES/255)*5= ADRES/51/注意:运算结果小数部分是舍弃的,这可以帮助大家理解此程 /序 b=ADBUFF*10/51-10*a;Display(); void Display(void)/下面设置十位,个位的代码,请结合电路图理解七段数码管的显示代码的设定switch (a) case 0:Num_t=0b00000001;break;case 1:Num_t=0b01011101;break;case 2:Num_t=0b00010010;break;case 3:Num_t=0b00011000;break; case 4:Num_t=0b01001100;break; case 5: Num_t=0b10001000;break; default: break; PORTC=Num_t; switch (b) case 0:Num_one=0b00100001;break;case 1:Num_one=0b01111101;break;case 2:Num_one=0b00110010;break;case 3:Num_one=0b00111000;break; case 4:Num_one=0b01101100;break; case 5: Num_one=0b10101000;break; case 6:Num_one=0b10100000;break;case 7:Num_one=0b00111101;break; case 8:Num_one=0b00100000;break; case 9: Num_one=0b00101000;break; default: break; PORTD=Num_one;void main(void)init_sys();while(1)asm(nop); 三、电路原理图: INCLUDEP16f877a.incADRES EQU 0X23 ;A BUFFER TO SAVE A/D RESULTINTCNTEQU 0X24;A BUFFER TO SAVE A/D TIMES;下面这些寄存器是用来进行除法的ACCALOEQU 0X25ACCAHIEQU 0X26ACCBLOEQU 0X27ACCBHIEQU 0X28ACCCLOEQU 0X29ACCCHIEQU 0X2AACCDLOEQU 0X2BACCDHIEQU 0X2CTEMPEQU 0X2DSIGNEDEQU 0 ORG 0x00 GOTO START ORG 0x04 BTFSC INTCON,T0IF ; Test T0 Interrupt Flag CALL TMR0_ISR ;T0 Interrupt Service Routine BTFSC PIR1,ADIF ; Test A/D Interrupt Flag CALL AD_ISR ; A/D Interrupt Service RoutineRETFIE START: CALL PIC_INIT ; PIC Initialization MAIN_LOOP:NOPNOPNOP NOP GOTO MAIN_LOOP;以下是二进制除法D_DIVS: IF SIGNED CALL S_SIGN ENDIFCALL SETUPCLRF ACCCHICLRF ACCCLOLOOP: BCF STATUS,CRLF ACCDLORLF ACCDHIRLF ACCCLORLF ACCCHIMOVF ACCAHI,WSUBWF ACCCHI,W ;check if acBTFSS STATUS,ZGOTO NOCHKMOVF ACCALO,WSUBWF ACCCLO,W ;if msb equal then check lsbNOCHK: BTFSS STATUS,C ;carry set if caGOTO NOGOMOVF ACCALO,W ;c-a into cSUBWF ACCCLOBTFSS STATUS,CDECF ACCCHIMOVF ACCAHI,WSUBWF ACCCHIBSF STATUS,C ;shift a 1 into b (result)NOGO: RLF ACCBLORLF ACCBHIDECFSZ TEMP ;loop untill all bits checkedGOTO LOOP IF SIGNEDBTFSS SIGN,MSB ; check sign if negativeRETLW 0GOTO NEG_B ; negate ACCa ( -ACCa - ACCa ) ELSERETLW 0 ENDIFSETUP: MOVLW .16 ; for 16 shiftsMOVWF TEMPMOVF ACCBHI,W ;move ACCb to ACCdMOVWF ACCDHIMOVF ACCBLO,WMOVWF ACCDLOCLRF ACCBHICLRF ACCBLORETLW 0NEG_A: COMF ACCALO ; negate ACCa ( -ACCa - ACCa )INCF ACCALOBTFSC STATUS,ZDECF ACCAHICOMF ACCAHIRETLW 0 IF SIGNEDS_SIGN MOVF ACCAHI,WXORWF ACCBHI,WMOVWF SIGNBTFSS ACCBHI,MSB ; if MSB set go & negate ACCbGOTO CHECK_ACOMF ACCBLO ; negate ACCbINCF ACCBLOBTFSC STATUS,ZDECF ACCBHICOMF ACCBHICHEK_A BTFSS ACCAHI,MSB ; if MSB set go & negate ACCaRETLW 0GOTO NEG_A ENDIF;-;以上是定标程序;-PIC_INIT:BCFSTATUS,RP0CLRF INTCNT CLRF INTCON BSF STATUS , RP0 MOVLW B11000101 MOVWF OPTIONR ;设置TIMER0工作模式 MOVLW B11111111 MOVWF TRISA ;RA口为输入端口,以便其部分管脚为 A/D 输入管脚 MOVLW B00000000 MOVWF TRISB ;为显示结果,先将RB、RC口设为输出端口 MOVWF TRISCBCF STATUS,RP0CLRF PORTBCLRF RCBSF STATUS,RP0MOVLW B00000010 ; 设置A/D工作模式 MOVWF ADCON1 ;BCF STATUS,RP0MOVWF ADCON1 BSF INTCON,T0IE BSF PIE1,ADIE BCF STATUS,RP0 ; Choose Bank0 MOVLW B01001001 ; f/8, CH1, A/D on MOVWF ADCON0 BSF INTCON,PEIE ; ; Enable Peripheral Interrupt BSF INTCON,GIE ; Turn on Global Interrupn EnableRETURN TMR0_ISR: BCF STATUS,RP0 INCF INTCNT,FBCF INTCON,TOIF ; Clear Interrupt Flag BSF ADCON0,GO ; Trigger A/D CALLISR_ENDRETURNAD_ISR:BCF STATUS,RP0BCF PIR1,ADIFMOVF INTCNT,WSUBLW .10 BTFSS STATUS,ZRETURNBCF STATUS,RP0CLRF INTCNT BCF PIR1,ADIF ; Clear InterrupE Flag MOVF A_DRES,W MOVWF ADRES ; Store ValueCALL DISPLAY RETURN; 以下A/D转换结果定标和显示程序结果显示DISPLAY: MOVF ADRES,WMOVWF ACCBLOCLRF ACCBHIMOVLW .50MOVWF ACCALOCLRF ACCAHICALL D_DIVSMOVF ACCBLO,WCALL CHAR_CODEMOVWF PORTBBCF PORTB,5MOVF ACCCLO,WMOVWF ACCBLOCLRF ACCBHIMOVLW .5MOVWF ACCALOCLRF ACCAHICALL D_DIVSMOVF ACCBLO,WCALL CHAR_CODEMOVWF RCRETURN;以下数码管查表CHAR_CODE:ADDWF PCL,F RETLW B00100001 ; Code for 0 RETLW B01111101 ; Code for 1 RETLW B00110010 ; Code for 2 RETLW B00111000 ; Code for 3 RETLW B01101100 ;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权许可合同:专利授权及维权服务协议
- 药店零售企业员工劳动合同与药品配送物流服务协议
- 炼钢原料加工工三级安全教育(公司级)考核试卷及答案
- 软体家具制作工作业指导书
- 2025年AR培训行业研究报告及未来行业发展趋势预测
- 景区酒店总经理任期管理与培训合同
- 耐蚀喷涂工应急处置考核试卷及答案
- 手风琴校音工作业指导书
- 住宅区屋顶绿化苗木供应与绿化设施安装合同
- 退伙协议书合同范本:房地产项目合伙人退出协议
- erp权限管理制度
- 厦门垃圾分类题目及答案
- 湘美版(2024)美术一年级上册第1课 桑叶和蚕宝宝 课件T内嵌视频
- (中职)仪器分析技术(项目1-15)配套教材课件完整版电子教案
- 数字人文资源本体建模-洞察及研究
- 2025船舶光租合同范本
- T/CIES 002-2016照明工程设计收费标准
- T/CCS 063-2023井工煤矿智能化供排水系统运维管理规范
- DB36-T1694-2022-餐厨垃圾集约化养殖黑水虻技术规程-江西省
- 超市卫生管理规范培训
- 国际压力性损伤溃疡预防和治疗临床指南(2025年版)解读
评论
0/150
提交评论