• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

汇编高手请进

小弟刚开始学单片机,这个延时程序搞不懂,请高手指点.
MAIN:  SETB   P1.0
       MOV    30H,#255
       LCALL  DELAY
       CLR    P1.0
       MOV    30H,#200
       LCALL  DELAY
       AJMP   MAIN
DELAY: MOV    R7,30H
D1:    MOV    R6,#250
D2:    MOV    R1,#200
D3:    DJNZ   R1,D3
       DJNZ   R6,D2
       DJNZ   R7,D1
       RET
       END
这个程序为什么不行呢?请高手指点
全部回复(20)
正序查看
倒序查看
2006-11-27 12:24
楼主,你要延时多久呀,我也是刚学的哈!!
我大概算了一下,你的延时达到25.5分钟(12M).
这样你要看灯的亮和灭要等上半个小时哟.
0
回复
henan123
LV.6
3
2006-11-27 14:18
@ding86361953
楼主,你要延时多久呀,我也是刚学的哈!!我大概算了一下,你的延时达到25.5分钟(12M).这样你要看灯的亮和灭要等上半个小时哟.
哈哈,是啊后来改了一点,大概4-5秒就可以了,问题已解决,谢了
0
回复
henan123
LV.6
4
2006-11-30 15:56
@henan123
哈哈,是啊后来改了一点,大概4-5秒就可以了,问题已解决,谢了
请问单句的加法,乘法指令可以在KEIL上执行吗?如果可以,请问应该如何操作?
0
回复
henan123
LV.6
5
2006-12-02 10:15
@henan123
请问单句的加法,乘法指令可以在KEIL上执行吗?如果可以,请问应该如何操作?
例,某系统外扩展了8K的RAM,要求把内部RAM20H单元的内容传送到外部RAM800H单元中
MOV  DPTR,#800H
MOV  A,#20H
MOVX @DPTR,A
请问这样可以吗
0
回复
2006-12-02 12:19
@henan123
例,某系统外扩展了8K的RAM,要求把内部RAM20H单元的内容传送到外部RAM800H单元中MOV  DPTR,#800HMOV  A,#20HMOVX@DPTR,A请问这样可以吗
这方面的我也不太熟悉哈,现在工作忙好久没看了哈!!!
你这样的写发好象不对!!!
0
回复
hotpower
LV.5
7
2006-12-04 01:30
@henan123
例,某系统外扩展了8K的RAM,要求把内部RAM20H单元的内容传送到外部RAM800H单元中MOV  DPTR,#800HMOV  A,#20HMOVX@DPTR,A请问这样可以吗
MOV  DPTR,#800H
MOV  A,20H
MOVX @DPTR,A



MOV  DPTR,#800H
MOV  R0,#20H
MOV  A, @R0
MOVX @DPTR, A
0
回复
henan123
LV.6
8
2006-12-06 15:02
@hotpower
MOV  DPTR,#800HMOV  A,20HMOVX@DPTR,A或MOV  DPTR,#800HMOV  R0,#20HMOV  A,@R0MOVX@DPTR,A
小弟多谢了,还有一个问题,CJNZ的用法,如何让温度低于20度开始加热,高于25度停止加热,程序应该怎么写?
0
回复
henan123
LV.6
9
2006-12-06 17:17
@henan123
小弟多谢了,还有一个问题,CJNZ的用法,如何让温度低于20度开始加热,高于25度停止加热,程序应该怎么写?
不好意思写错了应该是CJNE
0
回复
henan123
LV.6
10
2006-12-07 08:53
@henan123
不好意思写错了应该是CJNE
为什么用与ANL和或ORL可以把BCD转换成ASC呢,他具体是怎么回事?请高手指点
0
回复
2006-12-07 14:24
大哥 ,你的单片机的晶振频率是多少? 如果是11.0596M的话,机器周期是1us ,执行一条MOV 指令需要一个机器周期,也就是1us. 执行DJNZ 需要二个机器周期 ,需要2us. 他们之间的关系是 机器周期=1/12晶振的周期
0
回复
2006-12-07 14:25
@菠萝蜜999
大哥,你的单片机的晶振频率是多少?如果是11.0596M的话,机器周期是1us,执行一条MOV指令需要一个机器周期,也就是1us.执行DJNZ需要二个机器周期,需要2us.他们之间的关系是机器周期=1/12晶振的周期
根据这个规律 你自己算算
0
回复
henan123
LV.6
13
2006-12-07 19:51
@菠萝蜜999
根据这个规律你自己算算
为什么用与ANL和或ORL可以把BCD转换成ASC呢
0
回复
hotpower
LV.5
14
2006-12-09 00:05
@henan123
小弟多谢了,还有一个问题,CJNZ的用法,如何让温度低于20度开始加热,高于25度停止加热,程序应该怎么写?
用Keil C51吧~~~

http://hotpower.21ic.org/
0
回复
henan123
LV.6
15
2006-12-09 09:24
@henan123
为什么用与ANL和或ORL可以把BCD转换成ASC呢
我的晶振频率是11.0592但为什么用ANL和ORL可以把BCD转换成ASCII呢,他跟机器周期还有关系吗?小弟是初学的,问的不对请各位仍砖头
0
回复
hotpower
LV.5
16
2006-12-09 10:53
@henan123
我的晶振频率是11.0592但为什么用ANL和ORL可以把BCD转换成ASCII呢,他跟机器周期还有关系吗?小弟是初学的,问的不对请各位仍砖头
11.0592主要是为串口通讯无误差.
0
回复
hugang9999
LV.1
17
2006-12-09 13:27
传送参数你用的是30H,这样是不行的,应该用A寄存器,如果A里有数据,可以先将A里的数据放在31H里面,然后,MOV A,#200 ---
下面 MOV R7,A 就可以了
0
回复
henan123
LV.6
18
2006-12-10 09:09
@hugang9999
传送参数你用的是30H,这样是不行的,应该用A寄存器,如果A里有数据,可以先将A里的数据放在31H里面,然后,MOVA,#200---下面MOVR7,A就可以了
各位,再看一下这个程序
双字节十进制转化为单字节二进制
BCD低位在BCD1中,高位在BCD0中,
二进制数在BIN0中
BCD0  EQU   40H
BCD1  EQU   41H
BIN0  EQU   50H
BCD2BIN:  
     MOV  A,BCD0  ;将十进树送到A中
      MOV  B,#10
     MUL   AB
ADD   A,BCD1
MOV  BIN0,A
RET
这是书上的一段程序.小弟有点不明白,最后送往BIN0中的不还是双字节
十进制数吗?怎么会是二进制数,请高手指点,
0
回复
liwanli
LV.2
19
2006-12-11 20:33
@henan123
各位,再看一下这个程序双字节十进制转化为单字节二进制BCD低位在BCD1中,高位在BCD0中,二进制数在BIN0中BCD0  EQU  40HBCD1  EQU  41HBIN0  EQU  50HBCD2BIN:      MOV  A,BCD0  ;将十进树送到A中      MOV  B,#10    MUL  ABADD  A,BCD1MOV  BIN0,ARET这是书上的一段程序.小弟有点不明白,最后送往BIN0中的不还是双字节十进制数吗?怎么会是二进制数,请高手指点,
START: JNB P0.1,L1   ;有PG嗎?有PG就進行下一步測試
L1: CLR P1.0   ;3.3V短路RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.0   ;3.3V短路RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,L2   ;檢測到PG信號,可以進行下一步測試
L2: CLR P1.2   ;5V短路RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.2   ;5V短路RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,L3   ;檢測到PG信號,可以進行下一步測試
L3: CLR P1.3   ;12V短路RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.3   ;12V短路RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,L4   ;檢測到PG信號,可以進行下一步測試
L4: CLR P0.0      ;切換到輕載測試OVP
LCALL DELAY     ;調用延遲參數
CLR P1.4   ;3.3V過壓保護RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.4   ;3.3V過壓保護RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,L5   ;檢測到PG信號,可以進行下一步測試
L5: CLR P1.5   ;5V過壓保護RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.5   ;5V過壓保護RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,L6   ;檢測到PG信號,可以進行下一步測試
L6: CLR P1.6   ;12V過壓保護RELAY ON
LCALL DELAY   ;調用延遲參數
SETB P1.6   ;12V過壓保護RELAY OFF
LCALL DELAY   ;調用延遲參數
LCALL PS   ;PS-ON開關啟動
SETB P0.0      ;切換到重載準備測試OCP
LCALL DELAY     ;調用延遲參數
JB P0.1,NG   ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴
JNB P0.1,PASS ;檢測到PG信號,可以進行下一步測試,PASS燈亮,進入自動脫PIN程序
PASS: CLR P0.2      ;PASS燈亮并拖PIN
DELAY: MOV R5,#40    ;延時時間0.4S
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
PS: CLR P1.1   ;位向反
LCALL DELAY   ;調用延遲
SETB P1.1   ;位向復位
RET
NG: CLR P1.7      ;位向反
RET
END
0
回复
lmmm
LV.4
20
2006-12-15 22:37
@henan123
为什么用与ANL和或ORL可以把BCD转换成ASC呢
不要再问这样简单的问题了,动动脑筋.先查一下ASCII码表.BCD前面OR上3就是ASCII码
0
回复
yangyin
LV.2
21
2006-12-17 12:16
@liwanli
START:JNBP0.1,L1  ;有PG嗎?有PG就進行下一步測試L1:CLRP1.0  ;3.3V短路RELAYONLCALLDELAY  ;調用延遲參數SETBP1.0  ;3.3V短路RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,L2  ;檢測到PG信號,可以進行下一步測試L2:CLRP1.2  ;5V短路RELAYONLCALLDELAY  ;調用延遲參數SETBP1.2  ;5V短路RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,L3  ;檢測到PG信號,可以進行下一步測試L3:CLRP1.3  ;12V短路RELAYONLCALLDELAY  ;調用延遲參數SETBP1.3  ;12V短路RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,L4  ;檢測到PG信號,可以進行下一步測試L4:CLRP0.0      ;切換到輕載測試OVPLCALLDELAY    ;調用延遲參數CLRP1.4  ;3.3V過壓保護RELAYONLCALLDELAY  ;調用延遲參數SETBP1.4  ;3.3V過壓保護RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,L5  ;檢測到PG信號,可以進行下一步測試L5:CLRP1.5  ;5V過壓保護RELAYONLCALLDELAY  ;調用延遲參數SETBP1.5  ;5V過壓保護RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,L6  ;檢測到PG信號,可以進行下一步測試L6:CLRP1.6  ;12V過壓保護RELAYONLCALLDELAY  ;調用延遲參數SETBP1.6  ;12V過壓保護RELAYOFFLCALLDELAY  ;調用延遲參數LCALLPS  ;PS-ON開關啟動SETBP0.0      ;切換到重載準備測試OCPLCALLDELAY    ;調用延遲參數JBP0.1,NG  ;有PG嗎?有PG進行下一步測試,沒PG就停止測試,FALL燈亮,蜂鳴器長鳴JNBP0.1,PASS;檢測到PG信號,可以進行下一步測試,PASS燈亮,進入自動脫PIN程序PASS:CLRP0.2      ;PASS燈亮并拖PINDELAY:MOVR5,#40    ;延時時間0.4SD1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETPS:CLRP1.1  ;位向反LCALLDELAY  ;調用延遲SETBP1.1  ;位向復位RETNG:CLRP1.7      ;位向反RETEND
专业单片机培训:
培训内容如下:
1:培训的单片机有51,EMC,HOLTEK,NTK,SONIX,samsung,PIC
2:汇编语言程序的程序结构,常用的子程序的编写规范.
3:常用的电路的程序编写,如RC测温程序,单片机的I/O做AD转换,软件
   生成PWM等.
4:我自己编写了一套单片机汇编语言,适用于各种单片机,以免大家学习多种单片机的
    的烦恼,浪费精力和时间.
     就C语言一样,不同的单片机C语言的程序都可以用,
     只需修改单片机特定的功能,如计数器的配置,AD转换的配置
     PWM,I/O口的配置等.修改之后就可以把单片机汇编程序放到任何一种单片机
    了.
联系电话,深圳南山.13322927938,QQ:237035124,e_mail:  mcu12345@163.com
0
回复