![]() |
發布時間: 2019-12-21 18:36
正文摘要:剛學單片機三個星期的萌新,有問題實在解決不了,求大佬幫個忙。單片機型號STC95C52,數碼管為共陰極數碼管,LED連接數碼管運行,晶振為11.0592MHz,我設的定時中斷口為P3.3。其他接口和題目我都寫在紙上,現在的問題 ... |
匯編和硬件關系很大的,跟C不一樣的 T_0:PUSH PSW PUSH ACC LJMP MAIN POP ACC POP PSW RETI 像你這個中斷程序,進入中斷之后, LJMP MAIN就跳到別的地方去了,都不知道跑哪里去了 你這個程序一般人改不了,跳來跳去的,跟不上你的思路 這并不是一個很大程序,你最好是重新寫一個,把每個子程序的功能寫上,子程序之間加上分割線分好 這樣也好找問題 |
不會上傳圖片。。。我自己來闡述一下什么問題吧,在倒計時那段程序顯示的時候剛開始因為我只做了個位數的循環,沒有把十位和更高位一起放進去循環,所以就會出現只有一個數字穩定顯示的問題,其他的要么一秒閃一次,要么閃的頻率眼睛看得到,所以我給兩個數字放在一起套了一層循環,這樣就都能穩定顯示了。我師傅也和上面的大佬說了一樣的話,說我程序寫的太亂了。。。原諒我沒學過匯編語言就直接上單片機。。。 |
Y_G_G 發表于 2019-12-23 22:26 好吧好吧,以后寫程序會記得加的 ![]() |
注釋,注釋呀,人家寫C語言都要有注釋的,更不用說匯編了,沒有注釋,沒有分清標號的,哪怕是只有幾十行代碼,別人看起來也是很難理解的 如果你是復制了別人的代碼,最好也是自己給加上注釋,關鍵部分加完注釋,你基本上就知道這程序是怎么跑的了 CLR p2.7 CLR P2.6 CLR P2.5 CLR P2.4 CLR P2.3 CLR P2.2 CLR P2.1 CLR P2.0 LJMP START1 START1:SETB P1.5 你看一下這一段,這用不著那么多的CLR指令的, MOV P2,#000H就可以了 LJMP START1 LJMP START1這個標號就在下一條指令了,那LJMP指令就沒有存在的意義了 LJMP WAIT WAIT: JNB TF0,WAIT這個地方也是一樣的 這程序寫這太隨意了,一旦有什么問題,想找原因要找半天,如果是剛剛入門就更難了 |
這里是正確的代碼,給后面來的人留條可能存在的活路,等我過兩天實驗報告寫完會連圖一起發上來 SECOND EQU 30H TCOUNT EQU 31H ORG 0000H LJMP START ORG 0013H LJMP T_0 ORG 0040H START:MOV SP,#60H SETB EX1 SETB IT1 SETB EA MOV R0,#00H MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV DPTR,#TABLE LCALL DISP1 DISP1:MOV A,R0 ORL P2,#00001110B ANL P2,#11111110B MOVC A,@A+DPTR MOV P0,A LCALL DELAY MOV A,R1 ORL P2,#00001101B ANL P2,#11111101B MOVC A,@A+DPTR MOV P0,A LCALL DELAY MOV A,R2 ORL P2,#00001011B ANL P2,#11111011B MOVC A,@A+DPTR MOV P0,A LCALL DELAY MOV A,R3 ORL P2,#00000111B ANL P2,#11110111B MOVC A,@A+DPTR MOV P0,A LCALL DELAY RET DONE: SJMP DONE MAIN: MOV SECOND,#10 MOV TCOUNT,#00 MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 DISP: MOV A,SECOND MOV B,#10 DIV AB MOV R0,A MOV R1,B MOV DPTR,#TABLE MOV R4,#1 DISP2: MOV R3,#100 DISP3: MOV A,R0 ORL P2,#11110101B ANL P2,#11111101B MOVC A,@A+DPTR MOV P0,A LCALL DELAY2 MOV A,R1 ORL P2,#11111011B ANL P2,#11111011B MOVC A,@A+DPTR MOV P0,A LCALL DELAY2 DJNZ R3,DISP3 LJMP WAIT WAIT: JNB TF0,WAIT CLR TF0 MOV TH0,#3CH MOV TL0,#0B0H DEC SECOND MOV A,SECOND CJNE A,#00,DISP MOV SECOND,#10 CLR p2.7 CLR P2.6 CLR P2.5 CLR P2.4 CLR P2.3 CLR P2.2 CLR P2.1 CLR P2.0 LJMP START1 START1:SETB P1.5 LCALL DELAY1 CLR P1.5 LCALL DELAY1 LJMP START1 T_0:PUSH PSW PUSH ACC LCALL MAIN POP ACC POP PSW RETI DELAY:MOV R5,#25 D1:MOV R4,#25 D2:DJNZ R4,D2 DJNZ R5,D1 RET DELAY1:MOV R6,#15 D3:MOV R7,#15 D4:DJNZ R7,D4 DJNZ R6,D3 RET DELAY2:MOV R5,#75 D5:MOV R4,#200 D6:DJNZ R4,D2 DJNZ R5,D1 RET TABLE: DB 03FH,006H,05BH,04FH,066H DB 06DH,07DH,007H,07FH,06FH END |
代碼在整齊 主要的指令后面要加注釋,你整個程序下來,一條注釋都沒有,不說別人,就是你自己過幾天再來看都不一定知道你寫了什么呀參考一下我的,自己改動一下吧,自己是可以慢慢找到問題的 ![]() |