单片机汇编语言经典一百例_第1页
单片机汇编语言经典一百例_第2页
单片机汇编语言经典一百例_第3页
单片机汇编语言经典一百例_第4页
单片机汇编语言经典一百例_第5页
免费预览已结束,剩余45页可下载查看

付费下载

下载本文档

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

文档简介

1、MOV P1,A 灭所有的灯51 单片机实用程序库流水灯程序介绍:利用 P1 口通过一定延时轮流产生低电平 输出,以达到发光二极管轮流亮的效果。实际应用中例如: 广告灯箱彩灯、霓虹灯闪烁。程序实例()ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV A,#BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAYS 时RL A 将; 开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND方波输出程序介绍: 口输出高电平,

2、延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。程序实例():ORG 0000HMAIN:;直接利用口产生高低电平地形成方波步移位;显示个,十,百,千算机的内部计算都是二进 制,而二进制每除一个 2,实际上是向右移一次。所以为 了计算方便,我们选择取 6 个数,最后在算除法的时候, 只需要用单片机自带的右移位命令移 2 次就行了。27十六进制六位数加法(数码显示)程序实例 :ORG 0000HMAIN:ADNUMBER EQU 30H 鬥转换值ADDNUMBER EQU 31H 加数值 1ADL EQU 32H ;/ADH EQU 33H ;AD 转专换高低位值DISL E

3、QU 34H ;/DISH EQU 35H 显示高低位值ADDTOTAL EQU 36H 第一次 AD 转换值ADDJW EQU 37H 加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H 加标志ENDFLAG EQU 40H; 赋初值 /MOV ADDHOLD,#00HMOV ADDNUMBER,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HACALL CAIFENMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00H;/MAIN1:28;

4、显示 AD 值/ACALL DELAYACALL DELAYACALL ADMAIN3:ACALL DISPLAY;/;加这次的 AD 值,并判是否加了六次,是的话就进入死循环ACALL DELAYACALL ADD1ACALL DISPLAYINC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2LOOP: AJMP LOOP;/;没有加到六次,继续取值加,如果没有来新AD 值,还是去显示上次加的值,有新 AD 值来了,显示这次 AD 值,并加上上次 AD 值,显示 /MAIN2: ACALL DELAYACALL ADMOV A,ADNUMBERCJN A,ADD

5、TOTAL,MAIN3AJM MAIN2;/;/ADAD:29MOV DPTR,#7F00H 指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A 转换MOV R1,#64HD1: DJNZ R1,D1 等 100 微秒转换完MOVX A,DPTR 转换后的值给 AMOV ADNUMBER,A 转换的值给 30HRET转换;/;拆分 AD 值程序 /CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH

6、给显示值RET;/ ;显示/MOV A,ADDJWDISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,A30D3: JNB TI,D3CLR TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV DPTR,#SETTABMOV A,ADNUMBERMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV SBUF,#00HD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV

7、 ADDTOTAL,ADNUMBERADDC A,ADDHOLDMOV R3,#0AHMOV ADDHOLD,AJNC ADDJW1INC ADDJW31ADDJW1: ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A 加; 值取高位RET;/DELAY: 延; 时DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RETSETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6

8、HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND求六位和中的最大值和最小值(数码显示)程序实例() :ORG 0000HMAIN:ADNUMBER EQU 30H 鬥转换值ADL EQU 32H ;/32ADH EQU 33H ;AD 转换高低位值DISL EQU 34H ;/DISH EQU 35H 显示高低位值ADDTOTAL EQU 36H 第一次 AD 转换值ADDJW EQU 37H 加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H 加标志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中 最大的值ADL1 EQU 42H ;AD

9、中 最小的值ADHOLDH EQU 43HADHOLDL EQU 44H 求 AD 最大值与最小值时 AD 的比较值,即以此两个值为比较中转FOUR EQU 45HSUB EQU 46H 减去高低位后的值JWHOLD EQU 47Hf 呆存进位值;赋初值 /MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HACALL DELAYMOV ADL1,#00H 33MO

10、V ADHOLDH,#00HMOV FOUR,#00HMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAYACALL AD 取 AD 值MAIN3: ACALL CAIFENACALL DISPLA 显示ACALL DELAY ;算最大值和最小值 /ACALL DELAYACALL ADDHACALL ADDL;/;加和值显示 /ACALL ADD1ACALL DISPLAY;/;判是否加到了 6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/MOV A,A

11、DNUMBER34ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFE N 拆最小值ACALL CAIFEN 拆最大值ACALL DISPLAY示最大值最小值LOOP: AJMP LOOP;判有没有来新 AD 值,没有显示以前,有显示现在的MAIN2:ACALL DELAYACALL ADCJNE A,ADDTOTAL,MAIN3/35AJMP MAIN2;/;AD 转换 /AD: MOV DPTR,#7F00H 指向转换地址MOV A,#03H ;指向转换口MOVX DPTR,A 转换MOV R1,#64HD1:

12、 DJNZ R1,D1 等 100 微秒转换完MOVX A,DPTR 转换后的值给 AMOV ADNUMBER,A 转换的值给 30HRET;/; 拆分 AD 值程序 /MOV A,DISLCAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 给显示值RET;/;显示 /DISPLAY:MOVC A,A+DPTRMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD3: JNB TI,D3CL

13、R TIMOV A,DISHMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TIMOV A,ADDJWMOV DPTR,#SETTAB36MOV SBUF,AMOV ADDTOTAL,ADNUMBERD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD,AJNC ADDJW1INC ADDJ

14、WADDJW1: ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0HSWAP AMOV DISH,A 加; 值取高位RET37;/ ;AD 值中的最大值/MOV A,ADL1ADDH:MOV A,ADH1CJNE A,#00H,ADDH1MOV ADH1,ADNUMBERAJMP READDH1: MOV A,ADNUMBERCLR CSUBB A,ADH1JC REMOV ADH1,ADNUMBERRE: RET;/;AD 值中的最小值 /ADDL:MOV A,ADL1CJNE A,#00H,ADDL1MOV ADL1,ADNUMBERA

15、JMP RE1ADDL1: MOV A,ADNUMBERCLR CSUBB A,ADL1JNC RE1MOV ADL1,ADNUMBERRE1: RET;/;分解 AD 最小值的个,十位 /38CAIFEN1:ANL A,#0FHMOV A,ADH1MOV ADL,A 取; 低位MOV A,ADL1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 给显示值RET;/;分解 AD 最大值的个,十位 /CAIFEN2:MOV A,ADH1ANL A,#0FHMOV ADL,A 取; 低位ANL A,#0F0HSWAP AMOV ADH,

16、A ;取高位MOV JWHOLD,ADDJWMOV ADDJW,ADLMOV FOUR,AD H 给显示值RET;/DELAY: 延; 时MOV R3,#0AH39DD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2ADH EQU 33H ;AD 转换高低位值DJNZ R3,DD1RET;/SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND求减去最大和最小值后的值(数码显示)程序实例()ORG 0000HMAIN:AD

17、NUMBER EQU 30H 鬥转换值ADL EQU 32H ;/SUB EQU 46H 减去高低位后的值DISL EQU 34H ;/DISH EQU 35H 显示高低位值ADDTOTAL EQU 36H 第一次 AD 转换值ADDJW EQU 37H 加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H 加标志ENDFLAG EQU 40HADH1 EQU 41H ;AD 中 最大的值40ADL1 EQU 42H ;AD 中 最小的值ADHOLDH EQU 43HADHOLDL EQU 44H 求 AD 最大值与最小值时 AD 的比较值,即以此两个值为比较中转FOUR E

18、QU 45HMOV ADHOLDH,#00HJWHOLD EQU 47Hf 呆存进位值 ;赋初值/MOV ADDHOLD,#00HMOV ADL,#00HMOV ADH,#00HMOV DISL,#00HMOV DISH,#00HMOV ADDJW,#00HMOV ADDFLAG,#00HMOV ENDFLAG,#00HMOV ADDTOTAL,#00HMOV ADH1,#00HMOV ADL1,#00HMOV FOUR,#00HACALL ADDHMOV ADHOLDL,#00HMOV JWHOLD,#00HMOV SUB,#00H;/MAIN1:ACALL DELAYACALL DELAY

19、41ACALL AD 取 AD 值MAIN3: ACALL CAIFENACALL DISPLA 显示ACALL DELAYACALL DELAY; 算最大值和最小值 /ACALL DELAYACALL DELAYACALL ADDL ;/;加和值显示 /ACALL ADD1ACALL DISPLAY;/;判是否加到了 6 次/INC ADDFLAGMOV A,ADDFLAGCJNE A,#06H,MAIN2;/ACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL DELAYACALL CAIFE N 拆最小值ACALL CA

20、IFEN 拆最大值ACALL DISPLAY示最大值最小值ACALL DELAY42ACALL DELAYACALL JIAN1 呼叫减最大值最小值程序ACALL CAIFEN 拆分ACALL DISPLAY示减去最大值最小值后的值ACALL DELAYLOOP: AJMP LOOP;判有没有来新 AD 值,没有显示以前,有显示现在的/MOVX DPTR,A 转换MAIN2:ACALL DELAYACALL ADMOV A,ADNUMBERCJNE A,ADDTOTAL,MAIN3AJMP MAIN2;/;AD 转换 /AD:MOV DPTR,#7F00H 指向转换地址MOV A,#03H ;

21、指向转换口ANL A,#0F0HMOV R1,#64HD1: DJNZ R1,D1 等 100 微秒转换完MOVX A,DPTR 转换后的值给 AMOV ADNUMBER,A 转换的值给 30HRET43;/;拆分 AD 值程序 /CAIFEN:MOV A,ADNUMBERANL A,#0FHMOV ADL,A 取; 低位MOV A,ADNUMBERSWAP AMOV A,DISHMOV ADH,A ;取高位MOV DISL,ADLMOV DISH,ADH 给显示值RET;/;显示 /DISPLAY:MOV A,DISLMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF

22、,AD3: JNB TI,D3CLR TIMOV DPTR,#SETTABMOVC A,A+DPTRMOVC A,A+DPTRMOV SBUF,AD4: JNB TI,D4CLR TI44MOV A,ADDJWMOV DPTR,#SETTABMOVC A,A+DPTRMOV SBUF,AD5: JNB TI,D5CLR TIMOV A,FOURMOV DPTR,#SETTABMOV SBUF,AD6: JNB TI,D6CLR TIRET;/;加法程序 /ADD1:CLR CMOV ADDTOTAL,ADNUMBERMOV A,ADNUMBERADDC A,ADDHOLDMOV ADDHOLD

23、,AJNC ADDJW1INC ADDJWADDJW1:ANL A,#0FHMOV DISL,A 加; 值取低位MOV A,ADDHOLDANL A,#0F0H45SWAP AMOV DISH,A 加; 值取高位RET;/;AD 值中的最大值 /ADDH:MOV A,ADH1CJNE A,#00H,ADDH1MOV ADH1,ADNUMBERAJMP READDH1: MOV A,ADNUMBERSUBB A,ADL1CLR CSUBB A,ADH1JC REMOV ADH1,ADNUMBERRE: RET;/;AD 值中的最小值 /ADDL:MOV A,ADL1CJNE A,#00H,ADD

24、L1MOV ADL1,ADNUMBERAJMP RE1ADDL1: MOV A,ADNUMBERCLR CMOV ADH,A ;取高位JNC RE1MOV ADL1,ADNUMBER46RE1: RET;/;分解 AD 最小值的个,十位 /CAIFEN1:MOV A,ADL1ANL A,#0FHMOV ADL,A 取; 低位MOV A,ADL1ANL A,#0F0HSWAP AMOV DISL,ADLMOV ADDJW,ADLMOV DISH,ADH 给显示值RET;/;分解 AD 最大值的个,十位 /CAIFEN2:MOV A,ADH1ANL A,#0FHMOV ADL,A 取; 低位MOV

25、 A,ADH1ANL A,#0F0HSWAP AMOV ADH,A ;取高位MOV JWHOLD,ADDJWMOV FOUR,AD H 给显示值MOV DISH,ADHRET 47;/;分解减去最高位和最低位的数 /CAIFEN3:MOV A,SUBANL A,#0FHMOV ADL,AMOV A,SUBANL A,#0F0HSWAP AMOV ADH,AMOV DISL,ADLRET;/ ;减去最高位和最低位/JIAN1:MOV FOUR,#00HMOV ADDJW,JWHOLDMOV A,ADDHOLD 取和值CLR CSUBB A,ADH1 减最高位JNC JIAN2DEC ADDJW

26、有进位,高位减一JIAN2:CLR CSUBB A,ADL1 减低位JNC TUI 无进位出去,有进位高位减48DEC ADDJWTUI: MOV SUB,A 取减的值给 SUBRET;/;滤波 /DELAY: 延; 时MOV R3,#0AHDD1: MOV R1,#0FFHD2 : MOV R2,#0FFHDJNZ R2,$DJNZ R1,D2DJNZ R3,DD1RET ;/49SETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6HDB 0EEH,3EH,9CH,7AH,9EH,8EHEND除 4 所得软件滤波值(数码显示)程序实例():ORG 0000HMAIN:ADNUMBER EQU 30H 鬥转换值ADL EQU 32H ;/ADH EQU 33H ;AD 转换高低位值DISL EQU 34H ;/DISH EQU 35H 显示高低位值MOV ADDHOLD,#00HADDTOTAL EQU 36H 第;一次 AD 转换值ADDJW EQU 37H 加法进位数ADDHOLD EQU 38HADDFLAG EQU 39H 加标志ENDFLAG EQU

温馨提示

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

评论

0/150

提交评论