你的第二次修改,還有一處不足:
……
;CLR C
MOV DPTR,#TABLE
LOOP:
CLR A ;這里少了一句,下面每次讀出的,
;就不知道是什麼了
MOVC A,@A+DPTR
JNZ CONT_P
INC R2
SJMP NEXT
……
可以正常計數的程序如下。
;=========================================
ORG 0H
MOV A,#00H
MOV R2,A
MOV R3,A
MOV R4,A
MOV R6,A
MOV R5,#40
;CLR C
MOV DPTR,#TABLE
LOOP:
CLR A
MOVC A,@A+DPTR
JNZ CONT_P
; CJNE A,#00H,CONT_P
INC R2
SJMP NEXT
CONT_P:
JB ACC.7, CONT_N
INC R3
SJMP NEXT
CONT_N:
INC R4
NEXT:
INC DPTR
DJNZ R5, LOOP
MOV P0,R4
SJMP $
; 實際個數 保存單元 統計個數
;零個數 14 R2 21
;正數個數 19 R3 19
;負數個數: 7 R4 0
;其實是零和負數沒有分開統計,請高手指教一下,謝謝!
ORG 400H
TABLE:
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 01H, 15H, 22H,0FFH, 00H, 02H, 09H,0F9H, 00H, 00H
DB 02H, 05H, 00H,0FFH, 26H, 34H, 00H, 00H, 00H, 00H
END
『貳』 實現0到99通過單片機內部的定時計數器完成計數功能的匯編程序
SECOND EQU 30H
COUNT EQU 31H
ORG 00H
LJMP START
ORG 0BH ;定時器0中斷入口
LJMP INT_T0
START: MOV SECOND,#00H
MOV COUNT,#00H
MOV DPTR,#TABLE ;段碼表首地址
MOV P0,#3FH ;數碼管顯示初始化
MOV P2,#3FH
MOV TMOD,#01H ;設置定時器0工作方式
MOV TH0,#(65536-50000)/256 ;定時50毫秒
MOV TL0,#(65536-50000) MOD 256
SETB TR0 ;啟動定時/計數器0
MOV IE,#82H ;開中斷
LJMP $ ;等待中斷
INT_T0: MOV TH0,#(65536-50000)/256 ;定時50毫秒
MOV TL0,#(65536-50000) MOD 256
INC COUNT ;計數值加1
MOV A,COUNT
CJNE A,#20,I2 ;是否計夠1秒
MOV COUNT,#00H
INC SECOND
MOV A,SECOND
CJNE A,#60,I1 ;是否計夠60秒
MOV SECOND,#00H
I1: MOV A,SECOND
MOV B,#10
DIV AB ;分離計數值十位和個位
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A ;顯示計數值
I2: RETI ;中斷返回
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
『叄』 單片機實現60秒計時器 用匯編語言
這是你學校的實驗儀嗎?這原理圖不全,沒有開關電路,兩個74374的選片電路也沒有,這寫不了程序的。
『肆』 MCS-51單片機,利用定時計數器設計一個程序,匯編語言,最好有注釋,很簡單的就可以
ORG
0000H
JMP
BEGIN
ORG
0030H
TABLE:
;
共陰極數碼管顯示代碼表
DB
3FH,06H,5BH,4FH,66H
;01234
DB
6DH,7DH,07H,7FH,6fh
;56789
DELAY:
MOV
R5,#20
LOOP4:
MOV
R6,#50H
;延時20X20ms
LOOP5:
MOV
R7,#100
DJNZ
R7,$
DJNZ
R6,LOOP5
DJNZ
R5,LOOP4
RET
;---------------------------------------
BEGIN:
MOV
P2,#0FFH
;P2口置高電平,准備接收信號
MOV
R4,#0
MOV
A,R4
;R4位標志值送A寄存器
AGAIN:
MOV
DPTR,#TABLE
MOVC
A,@A+DPTR
MOV
P1,A
LOOP1:
MOV
A,P3
;
接收p3口的搶答信號
CPL
A
JZ
LOOP1
LOOP2:
RRC
A
;有人搶答信號則逐次移動判斷哪一位搶答
INC
R4
JNC
LOOP2
;********************
MOV
A,R4
MOVC
A,@A+DPTR
;找到相應位顯示代碼
MOV
P1,A
LEDDIS:
MOV
A,#0FFH
CLR
C
LEDDIS1:
RLC
A
DJNZ
R4,LEDDIS1
MOV
P0,A
LOOP3:
JNB
P2.2,BEGIN
;若主持人按下復位信號鍵,則轉向主程序
CPL
P2.0
;若沒按復位信號鍵,則通過p2.2口給出高低信號驅動蜂鳴器
LCALL
DELAY
;調用延時子程序
SJMP
LOOP3
;p2.2口反復間隔0.4s變化,驅動蜂鳴器
END
『伍』 51單片機按鍵計數問題求助,匯編
假設晶振頻率12MHz,P2.5控制蜂鳴器
ORG 0000H
LJMP START
ORG 000BH;T0中斷
LJMP T0INT;
START:
MOV SP,#80H ;初始堆棧值
MOV TMOD,#01H ;定時器0工作於方式1
MOV TH0,#0FEH ;定時器0定時時間=500uS
MOV TL0,#00CH ;設置定時初值
SETB ET0 ;使能定時器0中斷
SETB EA ;開總中斷
SETB P2.5
MOV R1,#0
DISP:
MOV A,R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
K_1:
JB P3.0,K_1
CALL DELAY
JB P3.0,K_1
INC R1
JNB P3.0,$
CJNE R1,#10,DISP
MOV R1,#0
MOV YSJS1,#0
MOV YSJS2,#10
SETB TR0;定時器0啟動
SJMP DISP
DELAY:
MOV R6,#20
L1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,L1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;定時器0中斷服務程序
T0INT: MOV TH0,#0FEH ;定時器0定時時間=500uS
MOV TL0,#00CH ;設置定時初值
CPL P2.5 ;驅動蜂鳴器
DJNZ YSJS1,QT0 ;
DJNZ YSJS2,QT0 ;鳴響1.28秒
CLR TR0 ;
SETB P2.5
QT0: RETI ;
YSJS1 EQU 30H ;
YSJS2 EQU 31H ;
END
『陸』 單片機計數器計數怎麼用匯編實現
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#06H
MOV TH0,#0FFH
MOV TL0,#0FFH
SETB TR0
SETB ET0
SETB EA
CLR A
SJMP $
T0ISR:
INC A
MOV P0,A
RETI
END
『柒』 怎樣用匯編語言實現單片機的可逆計數功能呢並將其用led顯示謝謝
是51核的單片機不?
如果是51的話,使用DEC指令就可以實現連減功能。每執行一次DEC指令。就會將操作的數值減一。
顯示的話,要分情況的。數碼管的驅動方式分好幾種。常用的是共陽極數碼管掃描顯示。還有共陰極掃描。還有共陽極靜態顯示和共陰極靜態顯示。所以,顯示這個不太好弄。
程序倒不是很難。不過需要弄清楚數碼管的連接。
『捌』 52單片機實現兩位數按鍵計數,匯編語言
又有按鍵又有數碼管,即應該先畫模擬圖或原理圖,確定硬體連接關系後才能寫程序。如果是實物開發板,就更應該給出原理圖,否則,寫出來的程序與開發板不符,那程序也沒用。可以用模擬圖來調試程序。
『玖』 用匯編語言寫一個單片機定時器/計數器的程序
1.以查詢方式工作,每計滿100個脈沖,則取反P1.0口線狀態。
ORG0000H
MOVTMOD,#06H
MOVTH0,#156
MOVTL0,#156
SETBTR0
LP:JNBTF0,LP
CPLP1.0
SJMPLP
END
2.以中斷方式工作,每計滿200個脈沖,則取反P1.0口線狀態。
ORG0000H
SJMPSTART
ORG000BH
CPLP1.0
RETI
START:
MOVTMOD,#06H
MOVTH0,#56
MOVTL0,#56
SETBTR0
MOVIE,#82H
SJMP$
END
『拾』 at89c51單片機計數器的使用,匯編語言,
P1,當做按鍵輸入,低電平有效;
P0,計數輸出,低電平發光。
KEYSTA EQU P1.0
KEYADD EQU P1.1
KEYSUB EQU P1.2
ORG 0000H
JMP MAIN
ORG 0030H
MAIN:
MOV R2, #255
LOOP:
MOV P0, R2
JB KEYSTA, LOOP1
CALL DELAY
JB KEYSTA, LOOP1
JNB KEYSTA, $
CPL F0
SJMP LOOP
LOOP1:
JNB F0, LOOP2
JB KEYADD, LOOP2
CALL DELAY
JB KEYADD, LOOP2
JNB KEYADD, $
DEC R2
SJMP LOOP
LOOP2:
JNB F0, LOOP
JB KEYSUB, LOOP
CALL DELAY
JB KEYSUB, LOOP
JNB KEYSUB, $
INC R2
SJMP LOOP
DELAY:
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
END
試驗成功。