pic18系列单片机语言应用实例汇编语言程序例程_第1页
pic18系列单片机语言应用实例汇编语言程序例程_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、;程序实现 A/D 转换功能,A/D 采用中断方式。该程序通过单片机的 RA2 模拟通道送入;一直流电压,当送入的直流电压大于 2.5V 时,8 个 LED 闪动,当直流电压恢复到 2.5V 以下;时,LED 停止闪动。为了防止干扰,本程序对直流电压采样 10 次后再作判断,中间的采样结;果用间接寻址的方式存取。LISTP=18F458INCLUDE P18F458.INCTIMES DEY ACCALO ACCAHI ACCBLO ACCBHI FLAG DEYH DEYLBEGFSREQU EQU EQU EQU EQU EQU EQU EQU EQUEQU0X20 TIMES+1 TIM

2、ES+2 TIMES+3 TIMES+4 TIMES+5 TIMES+6 TIMES+7 TIMES+90X30;ACCA 为双精度加数寄存器;ACCB 为双精度加法的结果寄存器;间接寻址 FSR 的起始值(宏定义方式给出)0X0000 MAIN 0X0008SERVE0X30GOTOGOTO;转向中断服务子程序;*双字节减法子程序, D_SUBCALL地址 ACCB-ACCA,出口地址 ACCB*NEG_A;求ACCA 的补码;*双字节加法子程序, D_ADDMOVF ADDWF BTFSC INCF MOVFADDWF地址 ACCB+ACCA,出口地址 ACCB*ACCALO,0ACCBL

3、O;ACCB 和ACCA 低半字节相加SUS,C;有进位否?;有,ACCB 高字节加 1,再加 ACCAHI;ACCA、ACCB 高半字节相加ACCBHI ACCAHI,0ACCBHIRETURN;子程序返回;* ACCA 取补子程序*NEG_ACOMF INCF BTFSC DECF COMFRETURNACCALOACCALO;ACCALO 取反加 1SUS,Z;低 8 位有进位吗?;有,ACCAHI 减 1,再取反;否则 ACCAHI 直接取反;子程序返回ACCAHIACCAHI;*初始化子程序*INITIALCLRF MOVLWMOVWFCON 0X51ADCON0;总中断和中断;选择

4、 AD 通道为 RA2,且打开 A/D 转换器;在工作状态,且使 AD 转换时钟为 8ToscMOVLWMOVWF0X80ADCON1;转换结果右移,即 ADRESH 寄存器的高 6;位为0,且把 RA2 口设置为模拟量输入式;(注意后面要把 RA5 改成数据 I/O 方式,以;输出显示信号)BCF BSF BSF BSF BSF BSF BCF BCF BCFMOVLW MOVWF MOVLWMOVWFPIR1,ADIF PIE1,ADIECON,PEIE IPR1,ADIP RCON,7 TRISA,2 TRISA,5 TRISC,5 TRISC,3 0XC0SSPS 0X30SSPCON

5、1;清除 A/D 转换标志;A/D 转换中断允许;中断允许;B 口变位中断高优先级;使能中断优先级;设置 RA2 为输入方式;置RA5 为输出方式,以输出锁存信号;设置 SCK 与SDO 为输出方式;设置 SSPS寄存器;设置 SPI 的控制方式,允许 SSP 方式,并;且时钟下降沿发送,与74HC595 当其;SCLK 从低到跳变时,串行输入数据;(DI)移入寄存器的特点相应CLRFRETURNFLAG;*DELAY延时子程序*MOVLW MOVWF MOVLW MOVWF NOP DECFSZ GOTO DECFSZ GOTORETURN0XFF DEYH 0XFFDEYLAGAIN1AG

6、AIN2DEYL AGAIN2 DEYHAGAIN1;* A/D 中断服务子程序*SERVEBCF MOVF MOVWF INCF MOVF MOVWF INCF DECF MOVLW MOVWF DECFSZGOTOPIR1,ADIF ADRESH,W INDF0 FSR0L ADRESL,W INDF0 FSR0L TIMES,1 0X02DEY DEY,1LOOP13;清除 A/D 转换标志;并A/D 转换结果的高两位;A/D 转换结果的低 8 位并;A/D 转换次数减 1LOOP13;给予一定的延时,保证两次 A/D 转换期间;2Tad 的间隔时间和电容的采样时间;启动下一次 A/D

7、转换;中断返回BSFRETFIEADCON0,2;* LED 闪烁ALARM子程序*MOVLW XORWF BTFSS CALL NOP BTFSC CALLRETURN0X01 FLAG,1 FLAG,0DISPLAY0;调用显“0”子程序FLAG,0DISPDARK;调用显“DARK”子程序;*显全 0 子程序* DISPLAY0TRANSMIT;SPI 发送显示子模块;LACK 送低电平,为锁存做准备CLRF MOVLW MOVWF MOVLWMOVWFPORTA 0X08 TIMES 0XC0SSPBUFLOOP80;显示值为 0,C0H 为 0 的段码;启动发送WAITBTFSS G

8、OTO BCF DECFSZ GOTO BSFRETURNPIR1,SSPIF WAIT PIR1,SSPIF TIMES LOOP80PORTA,5;等待发送结束;清除中断标志;一次要发送完 8 个数据;最后给一个锁存信号,代表一次显示任务完成;*显示全 DARK 子程序* DISPDARKTRANSMIT1;SPI 发送显示子模块;LACK 送低电平,为锁存做准备CLRF MOVLW MOVWFLOOP8D MOVLWMOVWFWAIT1BTFSS GOTOPORTA 0X08 TIMES 0XFFSSPBUF;显示值为 0,FFH 为DARK 的段码;启动发送PIR1,SSPIFWAIT

9、1;等待发送结束BCF DECFSZ GOTO BSFRETURNPIR1,SSPIF TIMES LOOP8DPORTA,5;清除中断标志;一次要发送完 8 个数据;最后给一个锁存信号,代表一次显示任务完成;*主程序*MAINNOPCALLINITIAL;初始化LOOPMOVLW0X80;转换结果右移,及 ADRESH 寄存器的高 6 位为0;且把 RA2 口设置为模拟量输入式(注意后面要把; RA5 改成数据 I/O 方式,以输出显示信号)MOVWF MOVLW MOVWF MOVLW MOVWF BSFBSF MOVF BTFSS GOTO BCF NOP CLRF CLRF MOVLW

10、 MOVWF MOVLW MOVWF MOVF MOVWF INCF MOVF MOVWFINCFADCON1 BEGFSR FSR0L 0X0A TIMESCON,GIEADCON0,2 TIMES,W;给出间接寻址时 FSR 的初值;每一轮 A/D 连续采样 10 次;总中断打开,及可以进行 A/D 转换中断;启动 A/D 转换LOOP1SUS,ZLOOP1CON,GIE;等待 A/D 转换中断;A/D 转换次数到 10 次,关闭中断ACCBHI ACCBLO 0X0A TIMES BEGFSR FSR0L INDF0,W ACCAHI FSR0L INDF0,W ACCALOFSR0L;双精度加法的结果寄存器清 0,为后面准备LOOP15CALL DECFSZ GOTO NOP MOVLW MOVWF MOVLW MOVWF CLRFCALLD_ADD TIMESLOOP15;计算得到 10 次A/D 转换的和0X84 ADCON1 0X14 ACCAHI ACCALOD_SUB;把RA5 设成数字 I/O,以输出显示锁存信号;通过双精度减判断模拟量是否达到限;度(1400H=200H*0AH,200H 与 2.5V 对应)B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论