1樓:匿名使用者
什麼是能校時?自動校時?
strt equ p2.6
stp equ p2.7
clrr equ p3.0
sec equ p3.5
min equ p3.6
hour equ p3.7
org 00h
sjmp main
org 0bh
ajmp t0int0
org 30h
main: mov sp,#60h
mov r4,#20
mov tmod,#01h
mov th0,#03ch;#9eh 12m晶振時定時初值取#3cb0h
mov tl0,#0b0h;#58h
setb et0
setb ea
;mov 28h,#12
ks: lcall disp
jb sec,km
lcall disp
jnb sec,$-3
ajmp sinc
km: jb min,kh
lcall disp
jnb min,$-3
ajmp minc
kh: jb hour,k1
lcall disp
jnb hour,$-3
ajmp hinc
sinc: inc 26h
mov a,26h
cjne a,#60,sinc0
mov 26h,#0
sinc0: ajmp ks
minc: inc 27h
mov a,27h
cjne a,#60,minc0
mov 27h,#0
minc0: ajmp km
hinc: inc 28h
mov a,28h
cjne a,#24,hinc0
mov 28h,#0
hinc0: ajmp kh
k1: lcall disp
jb strt,k2
lcall disp
jnb strt,$-3
ajmp start
k2: jb stp,k3
lcall disp
jnb stp,stop
k3: jb clrr,ks
lcall disp
jnb clrr,clear
ajmp ks
start: setb tr0
ajmp k1
stop: clr tr0
ajmp k2
clear: clr tr0
mov a,#0
mov 20h,a
mov 21h,a
mov 22h,a
mov 23h,a
mov 24h,a
mov 25h,a
mov 26h,a
ajmp ks
disp:
mov a,26h
mov b,#10
div ab
mov 20h,b ;餘數(秒個位數)
mov 21h,a ;商(秒十位數)
mov a,27h
mov b,#10
div ab
mov 22h,b ;餘數(分個位數)
mov 23h,a ;商(分十位數)
mov a,28h
mov b,#10
div ab
mov 24h,b ;餘數(時個位數)
mov 25h,a ;商(時十位數)
mov a,20h ;秒個位
acall seg7
mov p0,a
clr p2.0
acall dly
setb p2.0
mov a,21h ;秒十位
acall seg7
mov p0,a
clr p2.1
acall dly
setb p2.1
mov a,22h ;分個位
acall seg7
mov p0,a
setb p0.7
clr p2.2
acall dly
setb p2.2
mov a,23h ;分十位
acall seg7
mov p0,a
clr p2.3
acall dly
setb p2.3
mov a,24h ;時個位
acall seg7
mov p0,a
setb p0.7
clr p2.4
acall dly
setb p2.4
mov a,25h ;時十位
acall seg7
mov p0,a
clr p2.5
acall dly
setb p2.5
rett0int0: mov th0,#03ch;#9eh ;定時中斷子程式。重灌定時常數
mov tl0,#0b0h;#58h
djnz r4,t0intr ;50msx20=1s,未滿20次,跳出中斷子程式
mov r4,#20
inc 26h
mov a,26h
cjne a,#60,t0intr
mov 26h,#0
inc 27h
mov a,27h
cjne a,#60,t0intr
mov 27h,#0
inc 28h
mov a,28h
cjne a,#24,t0intr
mov 28h,#0
ajmp t0intr
t0intr: reti
dly10: mov r3,#30
d0: acall dly
djnz r3,d0
retdly: mov r7,#2
d1: mov r6,#40
djnz r6,$
djnz r7,d1
retseg7: inc a
movc a,@a+pc
retdb 03fh ;0
db 006h ;1
db 05bh ;2
db 04fh ;3
db 066h ;4
db 06dh ;5
db 07dh ;6
db 007h ;7
db 07fh ;8
db 06fh ;9end
2樓:匿名使用者
最好能看看c語言寫的,用c寫的也可以移植到其他平臺啊。
採不採納無所謂,貼一個用c寫的吧,是我買的實驗板帶的示例程式。
#include
#include
unsigned char data dis_digit;
unsigned char key_s, key_v;
unsigned char code dis_code[11]=;// 4, 5, 6, 7, 8, 9, off
unsigned char data dis_buf[8];
unsigned char data dis_index;
unsigned char hour,min,sec;
unsigned char sec100;
sbit k1 = p1^0;
sbit k2 = p1^1;
//sbit jj=p2^0;
bit scan_key();
void proc_key();
void inc_sec();
void inc_min();
void inc_hour();
void display();
void delayms(unsigned char ms);
void main(void)}}
}bit scan_key()
void proc_key()
else if((key_v & 0x02) == 0) // k2
dis_buf[3] = dis_code[min / 10]; // 分十位
dis_buf[4] = dis_code[min % 10]; // 分個位
}ea = 1;
}void timer0() interrupt 1
// 定時器0中斷服務程式, 用於數碼管的動態掃描
// dis_index --- 顯示索引, 用於標識當前顯示的數碼管和緩衝區的偏移量
// dis_digit --- 位選通值, 傳送到p2口用於選通當前數碼管的數值, 如等於0xfe時,
// 選通p2.0口數碼管
// dis_buf --- 顯於緩衝區基地址
void timer1() interrupt 3
}void inc_sec()
dis_buf[6] = dis_code[sec / 10]; // 秒十位
dis_buf[7] = dis_code[sec % 10]; // 秒個位
}void inc_min()
dis_buf[3] = dis_code[min / 10]; // 分十位
dis_buf[4] = dis_code[min % 10]; // 分個位
}void inc_hour()
if(hour > 9)
dis_buf[0] = dis_code[hour / 10]; // 時十位
else
dis_buf[0] = 0xff; // 當小時的十位為0時不顯示
dis_buf[1] = dis_code[hour % 10]; // 時個位
}void delayms(unsigned char ms)
// 延時子程式}
組合語言微控制器,組合語言怎麼寫入微控制器
rlc 是帶進位的迴圈左移,rlc a即將a的內容左移一位,將進位位c中的值移到累加器a的最低位,a的最高位移到c裡。譬如說 設a 01000001,c 1 則如果執行rl 則a 10000010,c 1 a所有位左移一位,最低位補零,c不參加移位操作,保持原值不變 如果執行rlc後,則a 1000...
微控制器組合語言程式設計,全國微控制器組合語言程式設計師
org 0000h main mov dptr,3000h clr r0 clr r1 clr r2 mov r3,100 loop mov a,dptr clr c cjne a,0h,loop1 inc r0 djnz r3,loop loop1 rl a jc fushu inc r1 djn...
51微控制器求用組合語言編寫延時1小時的子程式要
延時一小時,這麼長,應該要用定時器,不能用迴圈的方式。org 00h ajmp main org 0bh ajmp t0int0 org 30h main mov sp,60h mov r4,20 mov tmod,01h mov th0,3ch 12m晶振時定時初值取 3cb0h,還可細調如 tl...