用高分!!c51微控制器組合語言編寫能校時的數字鐘。高手幫忙

時間 2021-08-31 20:04:20

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...