① 利用51單片機匯編實現計數器
p3.2 p3.3分別為中斷輸入,程序比較簡單,和C做差不多,區別在於
在匯編的中斷入口寫上跳轉語句跳到對應的中斷子程序
ORG 0003H
JMP INT0
ORP 0013H
JMP INT1
INT0://加操作
INT1://減操作
注意返回要用中斷返回RETI
② 求高手幫忙,利用51單片機匯編實現計數器
#include "regx52.h"
#define KEY_UP P3_6
#define KEY_DOWN P3_7
#define UP_KEY_RELEASED 0x1
#define DOWN_KEY_RELEASED 0x2
unsigned char code Tab[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
bit bUpPressed=0,bDownPressed=0;
void Delay(unsigned int uiCnt)
{
while(uiCnt>0)uiCnt--;
}
Display(unsigned char ucVar)
{
unsigned char ucTemp;
ucTemp=ucVar;
ucTemp=ucTemp/10;
P0=Tab[ucTemp];
P3_1=1;
Delay(100);
P3_1=0;
ucTemp=ucVar;
ucTemp%=10;
P0=Tab[ucTemp];
P3_0=1;
Delay(100);
P3_0=0;
}
unsigned char KeyProc()
{
if(KEY_UP==0)bUpPressed=1;
if(KEY_DOWN==0)bDownPressed=1;
if(bUpPressed==1&&KEY_UP==1){bUpPressed=0;return UP_KEY_RELEASED;}
if(bDownPressed==1&&KEY_DOWN==1){bDownPressed=0;return DOWN_KEY_RELEASED;}
}
main()
{
char ucTemp=12;
while(1)
{
if(KeyProc()==UP_KEY_RELEASED)
{
ucTemp++;
if(ucTemp>99)ucTemp=0;
}
if(KeyProc()==DOWN_KEY_RELEASED)
{
ucTemp--;
if(ucTemp<0)ucTemp=99;
}
Display(ucTemp);
}
}
程序已經調試,引腳定義跟你不一樣,自己改哈。
系統不讓回復,所以寫這了哈,
回cakoii兄:
其實,我也很不喜歡proteus這玩意,經常出現莫名錯誤,不過玩玩還是可以的。
第二,你真以為P0口的RP是多餘的嗎?我曾經做了個LED點陣試驗,不接RP,根本無法正確顯示,是一些隨機的點,別以你聰明,經驗是很重要的,不信你多看看別人的電路都是怎麼畫的,別人都是笨蛋嗎?
第三,P0的次序可以是任意的,這個跟你程序相關,你甚至可以這樣:a=p04,b=p02,b=p07...,你連這個都不懂,還作評論,你的思維已經被前輩給定死了,所以理解你。
第四,STC單片機有強上拉,相比之下,你的三極體及電阻就是脫了褲子放屁。
所以,這個世上很多人自以為是,悲哀!
到底是怎麼回事,諸位看官都有自己的判斷,不強求。
③ 單片機實現60秒計時器 用匯編語言
這是你學校的實驗儀嗎?這原理圖不全,沒有開關電路,兩個74374的選片電路也沒有,這寫不了程序的。
④ 用匯編語言寫一個單片機定時器/計數器的程序
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
⑤ 急!51單片機定時計數器實驗編程(匯編語言)
將計數值按二進制數在P1口驅動發光二極體顯示出來,到15秒後,計數值清零再從0開始計。
--這些發光二極體,是低電平發光,還是高電平發光?
下面的程序,適合於低電平發光:
ORG
0000H
LJMP
START
ORG
000BH
DEC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
MOV
A,
#255
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
如果是高電平發光,可以使用下面的程序:
ORG
0000H
LJMP
START
ORG
000BH
INC
A
MOV
P1,
A
RETI
ORG
0030H
START:
MOV
TMOD,
#16H
MOV
TH0,
#255
MOV
TL0,
#255
SETB
TR0
SETB
TR1
MOV
IE,
#82H
LOOP:
CLR
A
MOV
P1,
A
MOV
R2,
#240
WAIT:
MOV
TH1,
#HIGH(65536-62500)
MOV
TL1,
#LOW(65536-62500)
JNB
TF1,
$
CLR
TF1
DJNZ
R2,
WAIT
SJMP
LOOP
END
⑥ 傾家盪產求教 如何用單片機匯編語言編寫計數器程序
程序分開寫啊
首先是 單片機的初始化
然後是設置定時器的工作模式,計數初值,
在次,編寫顯示程序啊,用一個死循環來結束程序,通過不斷的定時器中斷來增加計數值,然後顯示到數碼管中
不過,整流電路應該在這個程序中不必使用吧,那個應該和電源想關的
⑦ 求單片機匯編程序:用定時器/計數器在P1.0口線上產生周期為500微秒,占空比為2:5的連續矩形波
;500us周期方波 ,占空比 2:5 。即高電平200us,低電平300us
ORG 0000H
AJMP START
ORG 000BH
AJMP T0INT
ORG 0030H
START: MOV SP,#60H
SETB EA
SETB ET0
MOV TMOD,#01 ;T0為工作方式1
CLR P1.0 ;先低電平
MOV TH0,#0FEH
MOV TL0,#0D4H ;300us 定時
SETB TR0;啟動定時
AJMP $
T0INT: CPL F0
CPL P1.0
JB F0,HIGH1
LOW0: MOV TH0,#0FEH
MOV TL0,#0D4H
RETI
HIGH1: MOV TH0,#0FFH
MOV TL0,#38H ;200us 定時
RETI
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
試驗成功。
⑨ 單片機匯編計數器有如下語句求解
簡單的說,這段代碼的意圖應該是:把定時器T0的16位初值移到內部工作寄存器並轉換成相應的BCD碼(一般用於送顯),結果保存在R4、R5、R6
ps:DA指令必須跟在ADD或ADDC後才起作用,對每4位進行BCD調整。因為4位16進制數(即16位二進制,具體到這段代碼就是TH0和TL0的內容)轉換成十進制的值最大為65535(其中每位10進制數用4位BCD碼來保存,5位數就要用20位,但是存儲器以位元組為單位組織,因此需要3位元組——24位),所以至少需要3個位元組(即代碼中的R4~6)才能完成保存其十進制值的轉換結果。 把這段代碼中的R4、R5、R6的內容直接送外部帶BCD解碼的數碼管(或高低4位分離後送全編碼的數碼管)就可以直接顯示定時器T0的十進制初值。
呵呵,樓主把左移當做乘2來理解也可以,但是這段代碼的意圖比較明顯,只是為了移位和BCD轉碼……
⑩ 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