导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→关于8051与ADC0809的汇编问题!![xufei2004]

 *第37372篇: 关于8051与ADC0809的汇编问题!!

  
楼 主:xufei2004 2006年1月24日08:50
 关于8051与ADC0809的汇编问题!!
我是初学单片机的,最近在搞一个8051与ADC0809的汇编程序,但在用软件调试的过程发现很多问题,但我又实在部知道怎样改过来,希望各位大虾们能帮帮忙,帮我看看咯
      程序如下:
ORG     0013H               ;中断服务程序入口
AJMP    PINT1              

ORG     2000H
MAIN:  MOV  R1,#0ATA     ;置数据区首地址
         SETB  IT1           ;为边沿触发方式
         SETB  EA           ;开中断
         SETB  EX1          ;允许中断
         MOV  DPTR,#7FF8H  ;指向IN0通道
         MOVX  @DPTR,A     ;启动A/D转换
LOOP:  NOP                 ;空操作,用于延长时间
         AJMP  LOOP         ;直接跳转指令
         
ORG   2100H                 ;中断服务程序入口
PINT1:  PUSH  PSW         ;保护现场
         PUSH  ACC
         PUSH  DPL
         PUSH  DPH
         MOV   DPTR,#7FF8H
         MOVX  A,@DPTR    ;读取转换后数据
         MOV   @R1,A        ;数据存入以DPTR为首地址的RAM中
         INC     R1          ;修改数据区指针
         MOVX  @DPTR,A    ;再次启动A/D转换
         POP     DPH        ;恢复现场
         POP     DPL
         POP     ACC
         POP     PSW
         RETI                 ;中断返回
P:      CJNE  R1, #4.AEH, LP1  ;将R1中现存的温度转换成的十六进制电压值与
48℃的十六进制数4.AEH比较,如果R1中温度不等
于48℃则指令跳转到LP1,相等则指令顺下执行
        AJMP   LP11          ;直接跳转指令,直接跳转到LP11
LP1:   JNC    LP11          ;进位标志位CY的状态判转指令,如果R1中的温度大于48℃,则CY=0,指令转移到LP11;如果R1中的温度小于48℃,则CY=1,指令顺下执行
        CLR    P1.0          ;清空P1.0口,把继电器1的控制口断电,断开继电器1
        AJMP   MAIN        ;直接跳转指令,温度低于48℃,直接跳转到MAIN,重新检测温度
LP11: SETB   P1.0           ;将P1.0口置1,接通继电器1
       CJNE  R1, #4.BAH, LP2  ;将R1中温度继续与48.5℃比较,不等于则跳转到LP2,相等则顺下执行
       AJMP  LP22            ;温度等于48.5℃,指令直接跳转到LP22
LP2:  JNC   LP22            ;R1中温度大于48.5℃,则CY=0,指令跳转到LP22;小于48.5℃,则CY=1,指令顺下执行
       CLR   P1.1         ;清空P1.1口,把继电器2的控制口断电,断开继电器2
       AJMP  MAIN   
LP22: SETB   P1.1           ;将P1.1口置1,接通继电器2
       CJNE  R1, #4.C7H, LP3  ;将R1中温度继续与49℃比较,不等于则跳转到LP3,相等则顺下执行
       AJMP  LP33            ;温度等于49℃,指令直接跳转到LP33
LP3:  JNC   LP33            ;R1中温度大于49℃,则CY=0,指令跳转到LP33;小于49℃,则CY=1,指令顺下执行
       CLR   P1.2           ;清空P1.2口,把继电器3的控制口断电,断开继电器3
       AJMP  MAIN   
LP33: SETB   P1.2           ;将P1.2口置1,接通继电器3
       CJNE  R1, #4.D4H, LP4 ;将R1中温度继续与49.5℃比较,不等于则跳转到LP4,相等则顺下执行
       AJMP  LP44            ;温度等于49.5℃,指令直接跳转到LP44
LP4:  JNC   LP44            ;R1中温度大于49.5℃,则CY=0,指令跳转到LP44;小于49.5℃,则CY=1,指令顺下执行
       CLR   P1.3           ;清空P1.3口,把继电器4的控制口断电,断开继电器4
       AJMP  MAIN   
LP44: SETB   P1.3           ;将P1.3口置1,接通继电器4
       CJNE  R1, #4.E1H, LP5  ;将R1中温度继续与50℃比较,不等于则跳转到LP5,相等则顺下执行
       AJMP  LP55            ;温度等于50℃,指令直接跳转到LP55
LP5:  JNC   LP55            ;R1中温度大于50℃,则CY=0,指令跳转到LP55;小于48.5℃,则CY=1,指令顺下执行
       CLR   P1.4            ;清空P1.4口,把继电器5的控制口断电,断开继电器5
       AJMP  MAIN   
LP55: SETB   P1.4           ;将P1.4口置1,接通继电器5
       CJNE  R1, #4.EEH, LP6  ;将R1中温度继续与50.5℃比较,不等于则跳转到LP6,相等则顺下执行
       AJMP  LP66           ;温度等于50.5℃,指令直接跳转到LP66
LP6:  JNC   LP66           ;R1中温度大于50.5℃,则CY=0,指令跳转到LP66;小于50.5℃,则CY=1,指令顺下执行
       CLR   P1.5            ;清空P1.5口,把继电器6的控制口断电,断开继电器6
       AJMP  MAIN   
LP66: SETB   P1.6           ;将P1.6口置1,接通继电器6
       CJNE  R1, #4.F8H, LP7  ;将R1中温度继续与51℃比较,不等于则跳转到LP7,相等则顺下执行
       AJMP  LP77           ;温度等于51℃,指令直接跳转到LP77
LP7:  JNC   LP77            ;R1中温度大于51℃,则CY=0,指令跳转到LP77;小于51℃,则CY=1,指令顺下执行
       CLR   P1.6           ;清空P1.6口,把继电器7的控制口断电,断开继电器7
       AJMP  MAIN   
LP77: SETB   P1.6           ;将P1.6口置1,接通继电器7
       CJNE  R1, #5.05H, LP8  ;将R1中温度继续与51.5℃比较,不等于则跳转到LP8,相等则顺下执行
       AJMP  LP88           ;温度等于51.5℃,指令直接跳转到LP88
LP8:  JNC   LP88            ;R1中温度大于51.5℃,则CY=0,指令跳转到LP88;小于51.5℃,则CY=1,指令顺下执行
       CLR   P1.7            ;清空P1.7口,把继电器8的控制口断电,断开继电器8
       AJMP  MAIN   
LP88: SETB   P1.7           ;将P1.7口置1,接通继电器85
       CJNE  R1, #5.11H, LP9  ;将R1中温度继续与52℃比较,不等于则跳转到LP9,相等则顺下执行
       AJMP  LP99           ;温度等于52℃,指令直接跳转到LP99
LP9: JNC    LP99           ;R1中温度大于52℃,则CY=0,指令跳转到LP99;小于52℃,则CY=1,指令顺下执行
      AJMP   MAIN
LP99:END                   ;结束程序,关机

  
2楼:xufei2004 2006年1月24日08:53
 急啊,大虾们快来帮帮忙啊!!
忘记了说我的邮箱是xufei2004009@126.com,希望能够在这里认识多些单片机高手,来指点一下我这只笨鸟!!
  
3楼:xufei2004 2006年1月24日10:37
 没人可以帮忙吗?
怎样一个来看看的人都没有的呢?

>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:请朋友们帮忙:在MCU内如何实现操作数大于2^32(4294967296)的计算?

[下一篇主题]:三极管BD240买不到,请问可以用什么型号的代替??急!!