找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1725|回复: 3
收起左侧

单片机汇编语言的直流电机三极管放大调速数码管不亮

[复制链接]
ID:461851 发表于 2019-1-10 09:23 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:

  1. ;AD转换的数据在20H-25H,读出的数据在24H
  2. ACK BIT 20H.0     ;应答标志位ACK=0表示无应答
  3. SCL BIT P2.0      ;时钟线
  4. SDA BIT P2.1          ;数据线
  5. WADD EQU 21H      ;器件地址(从地址)
  6. SUBD EQU 22H      ;器件内部地址(子地址)
  7. NUMBR EQU 23H     ;需读取的字节数
  8. RDATA EQU 25H     ;读出数据的存放首地址
  9.        
  10.        
  11. QJCSH:        MOV 20H,#00H
  12.                 MOV 21H,#00H
  13.                 MOV 22H,#00H
  14.                 MOV 23H,#00H
  15.                 MOV 24H,#00H
  16.                 MOV 25H,#00H
  17.                 MOV 30H,#00H
  18.                 MOV 31H,#00H
  19.                 MOV 32H,#00H
  20.                 MOV 33H,#00H
  21.                 MOV TMOD,#51H
  22.                 MOV TL0,#00H
  23.                 MOV TH0,#4CH
  24.                 MOV TL1,#00H
  25.                 MOV TH1,#00H
  26.                 SETB EA
  27.                 SETB ET0
  28.                 SETB ET1
  29.                 RET
  30.                 LJMP START
  31.                 ORG 000BH
  32.                 LJMP IT0P
  33.                 ORG 001BH
  34.                 LJMP IT1P
  35.                 ORG 0100H
  36. START:        MOV SP,#60H
  37.                 MOV SCON,#00H
  38.                 LCALL QJCSH;???
  39.                   
  40. ;ad转换子程序
  41. DQAD:        MOV WADD,#90H     ;写入PCF8591的地址
  42.                 MOV SUBD,#40H      ;写入PCF8591的控制字
  43.                 MOV NUMBR,#1       ;写入需读取的字节数
  44.                 MOV RDATA,#24H     ;送入首地址
  45.                 LCALL READI2C     ;读PCF8591子程序
  46.                 MOV A,24H
  47. ;从I2C总线读取N个字节数据子程序
  48. READI2C:LCALL STARTI2C     ;启动I2C总线
  49.                 MOV A,WADD         ;送入器件地址
  50.                 LCALL WI2C         ;向I2C总线发送一个字节数据子程序
  51.                 LCALL RACK         ;读取从机应答子程序
  52.                 JNB ACK,ROUT       ;判断从机有无应答ACK=0则无应答
  53.                 MOV A,SUBD         ;?送入器件内部地址
  54.                 LCALL WI2C
  55.                 LCALL RACK
  56.                 LCALL STARTI2C
  57.                 MOV A,WADD  
  58.                 INC A         
  59.                 LCALL WI2C
  60.                 LCALL RACK  
  61.                 JNB ACK,READI2C  
  62.                 MOV R0,RDATA      
  63. RI2C2:        LCALL RI2C
  64.                 MOV @R0,A  
  65.                 DJNZ NUMBR,RI2C1   
  66.                 LCALL NMACK         
  67. ROUT:        LCALL STOPI2C   
  68.                 MOV RDATA,#24H
  69.                 RET  
  70. RI2C1:        LCALL MACK     
  71.                 INC R0  
  72.                 SJMP RI2C2

  73. ;I2C?总线启动子程序
  74. STARTI2C:SETB SDA
  75.                 SETB SCL
  76.                 NOP
  77.                 NOP
  78.                 NOP
  79.                 NOP
  80.                 NOP  
  81.                 CLR SDA
  82.                 NOP
  83.                 NOP
  84.                 NOP
  85.                 NOP
  86.                 NOP  
  87.                 CLR SCL
  88.                 RET   

  89. ;I2C总线停止子程序
  90. STOPI2C:CLR SDA
  91.                 SETB SCL
  92.                 NOP
  93.                 NOP
  94.                 NOP
  95.                 NOP
  96.                 NOP  
  97.                 SETB SDA
  98.                 RET   

  99. ;主机应答子程序
  100. MACK:        CLR SDA
  101.                 SETB SCL
  102.                 NOP
  103.                 NOP
  104.                 NOP
  105.                 NOP
  106.                 NOP  
  107.                 CLR SCL
  108.                 RET   

  109. ;主机非应答子程序
  110. NMACK:  SETB SDA
  111.                 SETB SCL
  112.                 NOP
  113.                 NOP
  114.                 NOP
  115.                 NOP
  116.                 NOP  
  117.                 CLR SCL
  118.                 RET   

  119. ;向I2C总线发送一个字节数据子程序
  120. WI2C:        MOV R7,#8
  121. WLP:         RLC A
  122.                 MOV SDA,C
  123.                 NOP  
  124.                 SETB SCL
  125.                 NOP
  126.                 NOP
  127.                 NOP
  128.                 NOP
  129.                 NOP  
  130.                 CLR SCL  
  131.                 DJNZ R7,WLP
  132.                 RET   

  133. ;从I2C总线读取一个字节数据子程序
  134. RI2C:        MOV R7,#8
  135.                 CLR A
  136.                 SETB SDA
  137.                 NOP
  138. RLP:        SETB SCL
  139.                 NOP
  140.                 NOP  
  141.                 MOV C,SDA
  142.                 NOP  
  143.                 CLR SCL
  144.                 RLC A
  145.                 NOP
  146.                 NOP
  147.                 NOP
  148.                 NOP  
  149.                 DJNZ R7,RLP
  150.                 NOP
  151.                 RET
  152.                
  153. ;读取从机应答子程序
  154. RACK:        SETB SDA
  155.                 NOP
  156.                 NOP  
  157.                 SETB SCL
  158.                 CLR ACK
  159.                 NOP
  160.                 NOP  
  161.                 MOV C,SDA
  162.                 JC ACKEND
  163.                 SETB ACK
  164. ACKEND: NOP
  165.                 CLR SCL
  166.                 NOP
  167.                 RET
  168.                
  169. ;DA转换程序
  170.                 ORG 1000H            ;000000000000000000000
  171. DAZH:        CLR P2.4
  172.                 SETB P2.5
  173.                 CLR P2.6
  174.                 MOV R0,#0FEH
  175.                 MOVX @R0,A
  176.                 RET               

  177.                
  178. ;测速程序
  179.             ORG 0000H
  180. RESET:  LJMP CESU               
  181. CESU:        MOV SP,#60H
  182.                 MOV B,#14H
  183.                 MOV R0,#00H
  184.                 MOV R1,#70H
  185.                 MOV TMOD,#51H
  186.                 MOV TL0,#00H
  187.                 MOV TH0,#4CH
  188.                 MOV TL1,#00H
  189.                 MOV TH1,#00H
  190.                 SETB ET0
  191.                 SETB ET1
  192.                 SETB EA
  193.                 SETB TR0
  194.                 SETB TR1
  195. HERE:   SJMP HERE
  196. IT0P:   MOV TL0,#00H
  197.                 MOV TH0,#4CH
  198.                 DJNZ B,RTURN
  199.                 CLR TR0
  200.                 SETB F0
  201. IT1P:        MOV        R1,TH1
  202.                 MOV        R0,TL1
  203.                 MOV B,3CH    ;60的16进制
  204.                 MOV A,R0
  205.                 MUL AB        ;1s转速转换成1min转速
  206.                 MOV R1,B
  207.                 MOV R0,A
  208.                 MOV A,R0      
  209.                 ANL A,#0FH
  210.                 MOV 30H,A
  211.                 MOV A,R0      
  212.                 SWAP A
  213.                 ANL A,#0FH
  214.                 MOV 31H,A
  215.                 MOV A,R1      
  216.                 ANL A,#0FH
  217.                 MOV 32H,A
  218.                 MOV A,R1      
  219.                 SWAP A
  220.                 ANL A,#0FH
  221.                 MOV 33H,A
  222.                 CLR TR1
  223.                 SETB F0       
  224. RTURN:  RETI


  225. ;显示程序
  226. XS:                 CLR TI
  227.                  MOV R0,#30
  228.                  MOV R1,#4
  229. SEND:         MOV A,@R0
  230.                  MOV DPTR,#TAB
  231.                  MOVC A,@A+DPTR
  232.                  CPL A
  233.                  MOV SBUF,A
  234.                  JNB TI,$
  235.                  CLR TI
  236.                  INC R0
  237.                  DJNZ R1,SEND
  238.                  RET
  239. TAB:         DB 0C0H,0F9H,0A4H,0B0H,99H
  240.              DB 92H,82H,0F8H,80H,90H       
  241. END
复制代码

全部资料51hei下载地址:
1.rar (141.45 KB, 下载次数: 13)
回复

使用道具 举报

ID:461851 发表于 2019-1-10 09:24 | 显示全部楼层
请大家帮帮忙,压缩包里是图和程序,麻烦大家了
回复

使用道具 举报

ID:7485 发表于 2019-1-10 14:34 | 显示全部楼层
本帖最后由 ahshmj 于 2019-1-10 17:24 编辑

你的程序写的问题较多。最严重的是,"QJCSH"怎么放到了最前面?又没有指定程序在程序存储器的位置,自然就从0000H开始写入。

以下的程序就没地方写了:

     LJMP START
        ORG 000BH
        LJMP IT0P
        ORG 001BH
        LJMP IT1P
        ORG 0100H

另外:       LJMP START  这一句的前面应该有: ORG  0000H  (意思是第一个字节就是跳转到 START)单片机上电或启动以后是从这里开始执行程序。

你好像还需要继续打牢基本功。
回复

使用道具 举报

ID:401564 发表于 2019-1-10 18:53 | 显示全部楼层
看样子应该是从C过来学汇编的
汇编代码的位置和硬件是有很大关系的
首先:
ORG 00H
JMP  START
ORG  003H   ;声明INT0中断向量,也就是中断地址
JMP   XXXX   ;去中断处理程序
ORG  00BH  ;声明INT1中断向量
JMP   XXXX _1  ;去中断处理程序
ORG 100H
START:           STARTD在这里相当于一个地址,在JMP  START到ORG 100H之间不能有其它代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表