这是我写的1s延时子程序,汇编语言,但是在Keil上显示有错误,请大家帮忙修改一下,谢谢

作者&投稿:镡垂 (若有异议请与网页底部的电邮联系)
用keil编译汇编语言编写的程序,显示有错误且目标未建立,驱动是AT89C52,程序如下:~

你的程序不全,缺少以下子程序或表格:
1、DELAY
2、WRI
3、WRD
4、DELAY1
5、DAB2

你这个错误可真难找啊。
你把 TR+数字0 敲成 TR+大写字母O 了!
把 TH+数字0 敲成 TH+大写字母O 了!
然后在最后加一句 END 就可以了。


ORG 0000H
RESET: LJMP MAIN
ORG 000BH
LJMP ITOP
ORG 1000H
MAIN: MOV SP,#60H
MOV B,#0AH
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
SETB EA
HERE: SJMP HERE
ITOP: MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ B,LOOP
CLR TR0
LOOP: RETI

END

这个程序通过编译正常运行
代码段
假设CS,DS:代码:代码
; ------------------- ----------------------
;延时子程序指定的时钟周期数
;入口:
;迪达斯=时钟滴答数量(约1秒滴答18.2倍和182倍??,10秒打勾,如果不秒的延迟是几个倍至10倍,误差稍大)
Delay1S近
推DX </ PROC推CX
XOR AX,AX
INT 1AH
MOV时报“,”DX
传送时报[2],CX
Read_Time:XOR AX,AX
INT 1AH
子DX时报
SBB CX时代[2]
CMP DX,迪达斯
JB Read_Time
弹出CX
流行的DX <BR /的RET
时报DW 0,0
Delay1S ENDP
; ---------------------------- -------------
迪达斯EQU 18
开始:叫Delay1S
Exit_Proc:MOV AH,4CH;端程序
INT 21H />的代码最终
结束开始,编译结束

看看程序倒数第二行,你写“DJNZ R1,DEALY0”
应该是“DJNZ R1,DELAY0”
该打屁股啊


晶振为6Mhz 编写一个1S延时的子程序 用汇编 要方法
PUSH PSW INC 30H;进入中断后就自增 MOV A,30H CJNE A,#10,T_RET;看计数器的溢出到了10次没,没有就跳到T_RET再继续从15536计数 T_L1:延时1秒到了,写自己的程序吧。MOV 30H,#00H;记得把溢出计数器再次清零 T_RET:MOV TH0,#3CH MOV TL0,#0B0H POP PSW POP ACC RETI END ...

哪位高手知道 单片机精确延时1秒得C语言子程序 谢谢了
C语言延时程序:10ms延时子程序(12MHZ)void delay10ms(void){ unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);} 1s延时子程序(12MHZ)void delay1s(void){ unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;...

单片机。用汇编语言编程。 设计一软件延时1s的子程序。设晶振频率为12M...
delay1000ms:(HT46R65的单片机)(注意不要开启计时中断允许位)mov a,10000111b (设置频率和记数方式)(上升记数还是下降记数)mov tmr0c,a (tmr0c 计数器的控制寄存器)mov a,low(65536-31250) (设置的频率就是1S上升31250)因此是DELAY1S mov TMR0L,a (计数器的赋予初始值的...

单片机。用汇编语言编程。 设计一软件延时1s的子程序。设晶振频率为12M...
delay1000ms:(HT46R65的单片机)(注意不要开启中断允许位)mov a,10000111b (设置频率和记数方式)(上升记数还是下降记数)mov tmr0c,a (tmr0c 计数器的控制寄存器)mov a,low(65536-31250)mov TMR0L,a (计数器的赋予初始值的低位寄存器)mov a,high(65536-31250)mov TMR0h,a...

如何将1秒延时子程序加进来,是这段程序的时间变成秒,现在的时间走的很快...
根据定时常数,在ctc0中断程序中,要加个计数值,到1S才执行LP2 如:TH0=(65536-50000)\/256 TL0=(65536-50000)%256 12M的时候50MS中断,则计数要到20为1S,则执行LP2:DJNZ R4...

延时子程序怎么算等于1秒
你的程序没有问题吗?应该是void delay吧。。。 K我估计可以设为10^6-10^7之间,然后在for前面加一句: int t=clock(); for完了以后,计算差值clock()-t;每次调整K值, 如果差值在1000(ms)的话说明是1s了,当然每次不会很精确的…… 具体的K也要根据你的机器而定。 还望采纳,谢谢!记得...

C语言 单片机编写两位数码管不用定时器延时1s,怎么编
void delay(void) \/\/延时子程序 { unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} 具体延时时间要根据你单片机的速度,晶振频率,指令计算

汇编子程序延时1s如何算出来的?
延时1S计算方法是将所有指令执行时间相加得出的。比如:DLY1S:MOV R2,#10 ;1 DLY1:MOV R3,#200 ;1*10 DLY2:MOV R4,#248 ;1*200*10 DJNZ R4,$ ;2*248*200*10 DJNZ R3,DLY2 ;2*200*10 DJNZ R2,DLY1 ;2*10 RET ;2 TOTAL=1+10+2000+992000+4000+20+2...

单片机求一用C编写的延时1小时的子程序,要精确到秒级别
计时1小时差小于1秒,也就是误差要求小于1\/3600普通的晶振很难有这个精度,使用外部时钟比较有把据。你要的是软件就给你一个吧,能不能达到精度要求就看单片机的时钟部分,跟软件没有关系。\/***\/ \/*广州一丁自动化设备有限公司020-28969088 \/ \/***\/ include sbit led=P1^0;\/\/ led灯 unsigned ...

在单片机AT89C51芯片中,设计一个一秒的延时程序,有多少种方法,具体如 ...
另一种,做比较精确的延时,使用89C51的定时器来做 当AT89C51使用12M的晶体时,机器周期刚好是1us.用定时器非常好计算,非常精确,一月偏一秒都可以做到,加入偏查校正可以做到更精确。这个一般书上都会有的,查下书咯。这里说不清楚。一下子也不记得了,现在AT89C51已经停产了,代替他的是89S51 4K ...

元谋县15725994221: 单片机.用汇编语言编程. 设计一软件延时1s的子程序.设晶振频率为12MHz. -
扈馥清肤: delay1000ms:(HT46R65的单片机)(注意不要开启中断允许位)mov a,10000111b (设置频率和记数方式)(上升记数还是下降记数)mov tmr0c,a (tmr0c 计数器的控制寄存器)mov a,low(65536-31250)mov TMR0L,a (计数器的赋予初始值的...

元谋县15725994221: 求一个51单片机1S的延时程序,汇编的 -
扈馥清肤: DELAY: MOV R2,#200 ;1 DLY1: MOV R3,#200 ;1*100 DLY2: MOV R4,#248 ;1*200*100 DJNZ R4,$ ;248*2*200*100 DJNZ R3,DLY2 ;200*100*2 DJNZ R2,DLY1 ;200*2 DJNZ R7,DELAY ;调用是给R7赋值秒数 RET

元谋县15725994221: 51延时1S.程序..汇编 -
扈馥清肤: DELAY:MOV R4,#25 ;延时子程序,12M晶振延时1.001秒 L3: MOV R2 ,#200 L1: MOV R3 ,#248 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET

元谋县15725994221: 找一个单片机汇编语言编写的延时1ms的子程序 -
扈馥清肤: 多简单的小程序呀:TIME1MS: MOV R6, #2 TIME1: ;延时498uS MOV R7, #248 DJNZ R7, $ ;R7的为0时,程序向下运行,否则继续减 ; DJNZ R6, TIME1 ;加上此命令后,每个小周期时间为500uS ;运行两周为1MS,再加上最前面的MOV R6那条指令,就是1.002MS RET此程序实现的是1.002MS的定时,当然这当中不算主程序调用此延时程序时现场保护的时间,即压栈和出栈的时间

元谋县15725994221: 已知单片机的外接晶振频率fosc=12MHz .请编写汇编语言子程序,其功能分别是延时0.1s和1s 和 1 min. -
扈馥清肤: 实际为0.100005s delay01s: mov r1, #200 loop01s: mov r0, #249 djnz r0, $ djnz r1, loop01s ret实际为1.000074s delay1s: mov r0, #10 loop1s: acall delay01s djnz r0, loop1s ret实际为60.004568s delay1m: mov r0, #60 loop1m: acall delay1s djnz r0, loop1m ret

元谋县15725994221: 89C51单片机1S的延时程序? -
扈馥清肤: void delayms() // 延时子程序 对应12M晶振 {unsigned int ms=1000;while(ms--) //每一次循环1ms{for(i = 0; i < 120; i++);} }

元谋县15725994221: AT89C51单片机延时1秒程序怎么写??? -
扈馥清肤: void DELAY(int z)//延时zms {int x,y;for(x = z;x > 0;x--)for(y = 110;y > 0;y--); }DELAY(1000); 就可以延时1S 但是有很小的误差 精确的只能用定时器了

元谋县15725994221: 编写一个定时一秒的子程序,利用该子程序编写一个延时一分钟的程序.单片机汇编语言题目求解 -
扈馥清肤: equ min 60h ;分存放单元;精度不是很高的,看着办 delay1min:acall delay1sec djnz r6,exit mov r6,#60 inc min ret delay1sec:mov r5,#250 de2:mov r4,#20 de1:mov r3,#10 djnz r3,$ djnz r4,de1 djnz r5,de2 ret

元谋县15725994221: 单片机,试编写延时1min的子程序,设晶振频率为12MHz -
扈馥清肤: /* 这样可以是可以,但还真没见过这样用的.下面你参考一下*/void delay60s(void) //误差 0us {unsigned char a,b,c,d,n;for(d=239;d>0;d--)for(c=157;c>0;c--)for(b=228;b>0;b--)for(a=2;a>0;a--);for(n=1;n>0;n--); }

元谋县15725994221: 已知单片机的外接晶振频率f=12MHZ.请编写汇编语言子程序,其功能分别是延时0.1s,1s和1min. -
扈馥清肤: org 0030hmain:a equ 0040h b equ 0050hloop1:******** 给完分,留下MSN,再给全部答案你!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网