熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2024-11-22 09:37
正文摘要:要求是:采用匯編語言設(shè)計(jì)程序,用定時(shí)器中斷方式,循環(huán)顯示0-99。目前寫的,但是只有十位能正確顯示,后面都是亂碼,新手小白求助各位大佬(接線圖在下面) ORG 0000H LJMP MAIN ORG 000B ... |
55236 發(fā)表于 2024-11-24 17:05 感謝感謝 |
55236 發(fā)表于 2024-11-24 17:18 感謝感謝 |
lxm41577 發(fā)表于 2024-11-23 09:59 謝謝謝謝 |
188610329 發(fā)表于 2024-11-22 22:21 感謝感謝,接線是老師規(guī)定好的 |
A_Bit EQU 20H B_Bit EQU 21h ;十位數(shù)存放處 TEMP EQU 22h STAR: MOV TEMP, #0 ;初始化計(jì)數(shù)器 STLOP: ACALL DISPLAY INC TEMP MOV A,TEMP CJNE A,#100,NEXT ;=100重來 MOV TEMP,#0 NEXT: LJMP STLOP ;顯示子程序 DISPLAY: MOV A, TEMP ;將temp中 的數(shù)轉(zhuǎn)換成10進(jìn)制 MOV B,#10; DIV AB; MOV B_Bit,A ;十位在A MOV A_Bit,B;個(gè)位在B MOV DPTR,#TAB;指定查表啟始地址 MOV R0,#2;4 DPL1: MOV R1,#100;250 ;顯示1000次 DPLOP: MOV A,A_Bit;取個(gè)位數(shù) MOVC A,@A+DPTR;查個(gè)位數(shù)的7段代碼 ;CPL A; MOV P1 ,A;送出個(gè)位的7段代碼 CLR P2.7; ACALL D1MS;延時(shí)顯示1ms SETB P2.7; MOV A,B_Bit ;取十位數(shù) MOVC A, @A+DPTR ;查十位數(shù)的7 段代碼 ;CPL A; MOV P1 ,A;送出十位的7段代碼 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次沒完循環(huán) DJNZ R0,DPL1 ;2個(gè)100次沒完循環(huán)RET ;延時(shí)4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段數(shù)碼管各劃的數(shù)字排列表,共陽的七段花數(shù) TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h; END; |
A_Bit EQU 20H B_Bit EQU 21h ;十位數(shù)存放處 TEMP EQU 22h STAR: MOV TEMP, #0 ;初始化計(jì)數(shù)器 STLOP: ACALL DISPLAY INC TEMP MOV A,TEMP CJNE A,#100,NEXT ;=100重來 MOV TEMP,#0 NEXT: LJMP STLOP ;顯示子程序 DISPLAY: MOV A, TEMP ;將temp中 的數(shù)轉(zhuǎn)換成10進(jìn)制 MOV B,#10; DIV AB; MOV B_Bit,A ;十位在A MOV A_Bit,B;個(gè)位在B MOV DPTR,#TAB;指定查表啟始地址 MOV R0,#2;4 DPL1: MOV R1,#100;250 ;顯示1000次 DPLOP: MOV A,A_Bit;取個(gè)位數(shù) MOVC A,@A+DPTR;查個(gè)位數(shù)的7段代碼 ;CPL A; MOV P1 ,A;送出個(gè)位的7段代碼 CLR P2.7; ACALL D1MS;延時(shí)顯示1ms SETB P2.7; MOV A,B_Bit ;取十位數(shù) MOVC A, @A+DPTR ;查十位數(shù)的7 段代碼 ;CPL A; MOV P1 ,A;送出十位的7段代碼 CLR P2.6; ACALL D1MS; SETB P2.6; DJNZ R1,DPLOP ;100次沒完循環(huán) DJNZ R0,DPL1 ;2個(gè)100次沒完循環(huán)RET ;延時(shí)4毫秒即2微秒* R7*R6(按12MHZ算) D1MS: MOV R7 ,#5;10 D1: MOV R6,#50; DJNZ R6,$; DJNZ R7,D1; RET; ;7段數(shù)碼管各劃的數(shù)字排列表,共陽的七段花數(shù) TAB: DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h; END;就不知道對(duì)不對(duì),我們學(xué)校給的 |
5樓的似乎沒問題,你的原本的顯示部分寫的有點(diǎn)臃腫 |
顯示部分改了下,看看能不能用 DIS: ;顯示程序 MOV A, R0 ;取計(jì)數(shù)器R0的值 MOV B, #10 ;除以10,B寄存器為10 DIV AB ;A/B,商在A,余數(shù)在B MOVC A, @A+DPTR MOV P1, A SETB P0.0 ;十位的位選 CALL DLY CLR P0.0. MOV A, B ;顯示個(gè)位 MOVC A, @A+DPTR MOV P1, A SETB P0.1 ;個(gè)位的位選 CALL DLY CLR P0.1 RET |
MOV A, R2 ;顯示十位 MOVC A, @A+DPTR CLR P1.0 MOV P0, A SETB P0.0 ;十位的位選 CALL DLY MOV A, R3 ;顯示個(gè)位 MOVC A, @A+DPTR CLR P0.0 MOV P1, A SETB P1.0 ;個(gè)位的位選 CALL DLY RET 你這板子什么情況? 個(gè)位,和十位 段選 用的不是 同一個(gè)總線? 那你 到了十萬位,百萬位,千萬位, 還要用 P5,P6, P7 ? 你單片機(jī)有那么多口子么? |
計(jì)數(shù)到100了,清零,返回主程序加LJMAP MAIN |
這么復(fù)雜的板子,干嘛用匯編啊 |
Powered by 單片機(jī)教程網(wǎng)