找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4719|回复: 1
收起左侧

51单片机21路加热温度控制程序(汇编)

[复制链接]
ID:70976 发表于 2014-12-26 22:40 | 显示全部楼层 |阅读模式
  1. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  2. ;原理:通过改变加热管通电和断电时间比达到控制温度作用。
  3. ;可以独立设置21路加热管通断的百分比值。
  4. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  5. ;设置参数方法:同时按下主机面板上的“区域”和“上调”(或“下调”)键,
  6. ;调到需要设定参数的区域后,停止按按键,然后再同时按下“参数”和“上调”(或“下调”)键,
  7. ;设定该区域的参数,参数设定范围0~100%,当设定参数为0%时关闭加热管,
  8. ;当设定参数为100%时加热管常通电,当设定参数为50%时加热管通断时间比为1:1(即各50%),
  9. ;其他参数以此类推。
  10. ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  11.       SC01# EQU P0.0    ;1#输出
  12.       SC02# EQU P0.1    ;2#输出,以下雷同,共24路输出
  13.       SC03# EQU P0.2
  14.       SC04# EQU P0.3
  15.       SC05# EQU P0.4
  16.       SC06# EQU P0.5
  17.       SC07# EQU P0.6
  18.       SC08# EQU P0.7

  19.       SC09# EQU P1.0
  20.       SC10# EQU P1.1
  21.       SC11# EQU P1.2
  22.       SC12# EQU P1.3
  23.       SC13# EQU P1.4
  24.       SC14# EQU P1.5
  25.       SC15# EQU P1.6
  26.       SC16# EQU P1.7

  27.       SC17# EQU P2.0
  28.       SC18# EQU P2.1
  29.       SC19# EQU P2.2
  30.       SC20# EQU P2.3
  31.       SC21# EQU P2.4
  32.       SC22# EQU P2.5
  33.       SC23# EQU P2.6
  34.       SC24# EQU P2.7

  35.       XS1A2 EQU P3.0    ;RXD,P3.0接74LS164 1A2端,用于显示,不能改变
  36.       XSCLK EQU P3.1    ;TXD,P3.1接74LS164 CLK端,用于显示,不能改变

  37.       AJQUY EQU P3.2    ;设置区域的按键,要同时按下区域键和上调或下调键方可调节
  38.       AJCSH EQU P3.3    ;设置参数的按键,要同时按下参数键和上调或下调键方可调节
  39.       AJSHT EQU P3.4    ;上调按键
  40.       AJXIT EQU P3.5    ;下调按键

  41.       SDA   EQU P3.6    ;EEPROM数据传送口,必须接上拉电阻,否则有时开机不正常
  42.       SCL   EQU P3.7    ;EEPROM时钟传送口,必须接上拉电阻,否则有时开机不正常

  43.       KMWDT EQU 0E1H    ;看门狗地址

  44.       ORG  0000H ;程序执行开始地址
  45.       LJMP KS    ;跳至KS
  46.       ORG  0003H ;外中断0中断程序入口
  47.       RETI              ;跳至INT_0中断服务程序
  48.       ORG  000BH        ;定时器T0中断程序入口
  49.       LJMP INTT0        ;中断返回
  50.       ORG  0013H ;外中断1中断入口
  51.       RETI         ;中断返回
  52.       ORG  001BH ;定时器T1中断程序入口
  53.       RETI         ;跳至INTT1中断服务程序
  54.       ORG  0023H ;串口中断入口地址
  55.       RETI

  56.       ORG  0200H
  57. ;------------------------------------
  58. ;开机初始化
  59. ;------------------------------------
  60. KS:   MOV KMWDT,#00111100B ;设置看门狗
  61.       MOV R0,#0FFH      ;延时,待电源正常后系统才开始工作
  62.       DJNZ R0,$
  63.       MOV P0,#0FFH
  64.       MOV P1,#0FFH
  65.       MOV P2,#0FFH
  66.       MOV P3,#0FFH
  67.       MOV SP,#70H
  68.       MOV TMOD,#01H    ;设置T0为16位定时器,方式1
  69.       MOV TH0,#0D8H    ;设定T0的定时初值,12M晶振,定时为10ms,
  70.       MOV TL0,#0F0H    ;通断总时间周期=10ms×100(因为分成100%)=1s
  71.       SETB ET0         ;允许T0中断
  72.       SETB EA          ;开中断

  73.       MOV 6FH,#00H     ;6FH为10mS时间到标志,现置零


  74. ;开始运行,调用存储器保存的数据
  75. ;------------------------------------
  76.       LCALL  READ_DATA ;将EEPROM中原里程数据调入内存

  77. ;------------------------------------
  78.       MOV 48H,#1       ;设定开机后显示屏显示1#区域的参数
  79.       LCALL LEDXS1     ;调用显示程序
  80. ;------------------------------------

  81. ;把各区域内的参数值提取用于控制和显示
  82.       MOV 50H,30H      ;50H为1#输出时间参数值缓存区
  83.       MOV 51H,31H      ;51H为2#输出时间参数值缓存区
  84.       MOV 52H,32H      ;以下以此类推
  85.       MOV 53H,33H
  86.       MOV 54H,34H
  87.       MOV 55H,35H
  88.       MOV 56H,36H
  89.       MOV 57H,37H
  90.       MOV 58H,38H
  91.       MOV 59H,39H

  92.       MOV 5AH,3AH
  93.       MOV 5BH,3BH
  94.       MOV 5CH,3CH
  95.       MOV 5DH,3DH
  96.       MOV 5EH,3EH
  97.       MOV 5FH,3FH
  98.       MOV 60H,40H
  99.       MOV 61H,41H
  100.       MOV 62H,42H
  101.       MOV 63H,43H

  102.       MOV 64H,44H
  103.       MOV 65H,45H
  104.       MOV 66H,46H
  105.       MOV 67H,47H
  106. ;------------------------------------

  107. ;各输出运行状态标志置零
  108.       CLR 01H         ;01H为1#输出运行状态标志(区分输出是高电平还是低电平)
  109.       CLR 02H         ;02H为2#输出运行状态标志(区分输出是高电平还是低电平)
  110.       CLR 03H         ;以下以此类推
  111.       CLR 04H
  112.       CLR 05H
  113.       CLR 06H
  114.       CLR 07H
  115.       CLR 08H
  116.       CLR 09H

  117.       CLR 0AH
  118.       CLR 0BH
  119.       CLR 0CH
  120.       CLR 0DH
  121.       CLR 0EH
  122.       CLR 0FH
  123.       CLR 10H
  124.       CLR 11H
  125.       CLR 12H
  126.       CLR 13H

  127.       CLR 14H
  128.       CLR 15H
  129.       CLR 16H
  130.       CLR 17H
  131.       CLR 18H
  132.       SETB TR0         ;启动T0

  133. ;------------------------------------
  134. ;按键处理程序
  135. ;------------------------------------
  136. L1:   JB AJQUY,L5      ;设置区域值
  137.       MOV P0,#0FFH     ;设置区域时关闭所有输出口
  138.       MOV P1,#0FFH
  139.       MOV P2,#0FFH
  140.       JB AJSHT,L3      ;上调区域,此时同时显示该区域的参数
  141.       MOV A,48H
  142.       CJNE A,#24,L2    ;检查调节区域值是否到达24区
  143.       SJMP L0          ;到达24区的停止
  144. L2:   INC 48H          ;调节区域值步进加1
  145.       SJMP L0

  146. L3:   JB AJXIT,L1      ;下调区域,此时同时显示该区域的参数
  147.       MOV A,48H
  148.       CJNE A,#1,L4     ;检查调节区域值是否到达1区
  149.       SJMP L0          ;到达1区的停止
  150. L4:   DEC 48H          ;调节区域值步进减1

  151. L0:   MOV A,#2FH       ;30H起开始放参数值,1区对应30H,2区对应31H,其他雷同
  152.       ADD A,48H        ;48H放当前区域值
  153.       MOV R1,0E0H      ;0E0H即为A的地址
  154.       MOV 49H,@R1      ;49H放当前区域的参数值
  155.       LCALL LEDXS1     ;调用显示子程序
  156.       LCALL YS1        ;延时
  157.       SJMP L1          ;返回再执行
  158. ;_____________________________________

  159. L5:   JB AJCSH,L00     ;设置参数值
  160.       MOV P0,#0FFH     ;设置区域时关闭所有输出口
  161.       MOV P1,#0FFH
  162.       MOV P2,#0FFH
  163.       MOV A,#2FH       ;30H起开始放参数值,因为以下要加1,所以从2FH开始
  164.       ADD A,48H
  165.       MOV R1,0E0H      ;0E0H即为A的地址
  166.       MOV 49H,@R1
  167.       JB AJSHT,L7      ;上调参数

  168.       MOV A,49H
  169.       CJNE A,#100,L6   ;参数等于100%不能再调
  170.       SJMP L0
  171. L6:   INC 49H          ;参数调节步进加1
  172.       SJMP L9

  173. L7:   JB AJXIT,L1      ;下调参数
  174.       MOV A,49H
  175.       CJNE A,#0,L8     ;参数等于0%不能再调
  176.       SJMP L0
  177. L8:   DEC 49H          ;参数调节步进减1
  178. L9:   MOV @R1,49H
  179.       LCALL LEDXS1     ;调用显示子程序
  180.       LCALL WRITE_DATA ;把参数值数据存入EEPROM,防止掉电数据丢失
  181.       LCALL YS1        ;延时
  182.       SJMP L1          ;返回再执行

  183. ;------------------------------------
  184. ;输出
  185. ;------------------------------------
  186. L00:  MOV A,30H       ;检查1#参数是否为0%
  187.       JNZ L01         ;1#参数不为0%时继续检测
  188.       SETB SC01#      ;1#参数为0%时关闭1#输出
  189.       SJMP L10        ;关闭1#输出后转检测2#端口
  190. L01:  CJNE A,#100,L02 ;检查1#参数是否为100%
  191.       CLR SC01#       ;1#参数为100%时1#有输出
  192.       SJMP L10        ;接通1#输出后转检测2#端口
  193. L02:  JB 01H,L03      ;判断1#输出是高电平还是低电平
  194.       CLR SC01#       ;1#输出是高电平的且不为0%或100#的按参数运行
  195.       DEC 50H         ;参数减法,直到为0
  196.       MOV A,50H
  197.       JNZ L10         ;参数减到0,未到0的转检测2#端口
  198.       CLR C           ;参数减到0,开始转为关闭,清空C
  199.       MOV A,#100      ;关闭的时间参数=100-原设定的参数
  200.       SUBB A,30H      ;原设定的参数放在30H
  201.       MOV 50H,A       ;关闭的时间参数放在50H
  202.       SETB 01H        ;置位,为1表示输出状态由高电平转为低电平
  203. L03:  SETB SC01#      ;按设定的时间参数高电平输出完后转为低电平输出
  204.       DEC 50H         ;参数减法,直到为0
  205.       MOV A,50H
  206.       JNZ L10         ;参数减到0,未到0的转检测2#端口
  207.       MOV 50H,30H     ;低电平按设定的时间参数输出完后返回转为高电平输出
  208.       CLR 01H         ;清标志位,为0表示输出状态由低电平转为高电平

  209. L10:  MOV A,31H       ;以下以此类推
  210.       JNZ L11
  211.       SETB SC02#
  212.       SJMP L20
  213. L11:  CJNE A,#100,L12
  214.       CLR SC02#
  215.       SJMP L20
  216. L12:  JB 02H,L13
  217.       CLR SC02#
  218.       DEC 51H
  219.       MOV A,51H
  220.       JNZ L20
  221.       CLR C
  222.       MOV A,#100
  223.       SUBB A,31H
  224.       MOV 51H,A
  225.       SETB 02H
  226. L13:  SETB SC02#
  227.       DEC 51H
  228.       MOV A,51H
  229.       JNZ L20
  230.       MOV 51H,31H
  231.       CLR 02H

  232. L20:  MOV A,32H
  233.       JNZ L21
  234.       SETB SC03#
  235.       SJMP L30
  236. L21:  CJNE A,#100,L22
  237.       CLR SC03#
  238.       SJMP L30
  239. L22:  JB 03H,L23
  240.       CLR SC03#
  241.       DEC 52H
  242.       MOV A,52H
  243.       JNZ L30
  244.       CLR C
  245.       MOV A,#100
  246.       SUBB A,32H
  247.       MOV 52H,A
  248.       SETB 03H
  249. L23:  SETB SC03#
  250.       DEC 52H
  251.       MOV A,52H
  252.       JNZ L30
  253.       MOV 52H,32H
  254.       CLR 03H

  255. L30:  MOV A,33H
  256.       JNZ L31
  257.       SETB SC04#
  258.       SJMP L40
  259. L31:  CJNE A,#100,L32
  260.       CLR SC04#
  261.       SJMP L40
  262. L32:  JB 04H,L33
  263.       CLR SC04#
  264.       DEC 53H
  265.       MOV A,53H
  266.       JNZ L40
  267.       CLR C
  268.       MOV A,#100
  269.       SUBB A,33H
  270.       MOV 53H,A
  271.       SETB 04H
  272. L33:  SETB SC04#
  273.       DEC 53H
  274.       MOV A,53H
  275.       JNZ L40
  276.       MOV 53H,33H
  277.       CLR 04H

  278. L40:  MOV A,34H
  279.       JNZ L41
  280.       SETB SC05#
  281.       SJMP L50
  282. L41:  CJNE A,#100,L42
  283.       CLR SC05#
  284.       SJMP L50
  285. L42:  JB 05H,L43
  286.       CLR SC05#
  287.       DEC 54H
  288.       MOV A,54H
  289.       JNZ L50
  290.       CLR C
  291.       MOV A,#100
  292.       SUBB A,34H
  293.       MOV 54H,A
  294.       SETB 05H
  295. L43:  SETB SC05#
  296.       DEC 54H
  297.       MOV A,54H
  298.       JNZ L50
  299.       MOV 54H,34H
  300.       CLR 05H

  301. L50:  MOV A,35H
  302.       JNZ L51
  303.       SETB SC06#
  304.       SJMP L60
  305. L51:  CJNE A,#100,L52
  306.       CLR SC06#
  307.       SJMP L60
  308. L52:  JB 06H,L53
  309.       CLR SC06#
  310.       DEC 55H
  311.       MOV A,55H
  312.       JNZ L60
  313.       CLR C
  314.       MOV A,#100
  315.       SUBB A,35H
  316.       MOV 55H,A
  317.       SETB 06H
  318. L53:  SETB SC06#
  319.       DEC 55H
  320.       MOV A,55H
  321.       JNZ L60
  322.       MOV 55H,35H
  323.       CLR 06H

  324. L60:  MOV A,36H
  325.       JNZ L61
  326.       SETB SC07#
  327.       SJMP L70
  328. L61:  CJNE A,#100,L62
  329.       CLR SC07#
  330.       SJMP L70
  331. L62:  JB 07H,L63
  332.       CLR SC07#
  333.       DEC 56H
  334.       MOV A,56H
  335.       JNZ L70
  336.       CLR C
  337.       MOV A,#100
  338.       SUBB A,36H
  339.       MOV 56H,A
  340.       SETB 07H
  341. L63:  SETB SC07#
  342.       DEC 56H
  343.       MOV A,56H
  344.       JNZ L70
  345.       MOV 56H,36H
  346.       CLR 07H

  347. L70:  MOV A,37H
  348.       JNZ L71
  349.       SETB SC08#
  350.       SJMP L80
  351. L71:  CJNE A,#100,L72
  352.       CLR SC08#
  353.       SJMP L80
  354. L72:  JB 08H,L73
  355.       CLR SC08#
  356.       DEC 57H
  357.       MOV A,57H
  358.       JNZ L80
  359.       CLR C
  360.       MOV A,#100
  361.       SUBB A,37H
  362.       MOV 57H,A
  363.       SETB 08H
  364. L73:  SETB SC08#
  365.       DEC 57H
  366.       MOV A,57H
  367.       JNZ L80
  368.       MOV 57H,37H
  369.       CLR 08H

  370. L80:  MOV A,38H
  371.       JNZ L81
  372.       SETB SC09#
  373.       SJMP L90
  374. L81:  CJNE A,#100,L82
  375.       CLR SC09#
  376.       SJMP L90
  377. L82:  JB 09H,L83
  378.       CLR SC09#
  379.       DEC 58H
  380.       MOV A,58H
  381.       JNZ L90
  382.       CLR C
  383.       MOV A,#100
  384.       SUBB A,38H
  385.       MOV 58H,A
  386.       SETB 09H
  387. L83:  SETB SC09#
  388.       DEC 58H
  389.       MOV A,58H
  390.       JNZ L90
  391.       MOV 58H,38H
  392.       CLR 09H

  393. L90:  MOV A,39H
  394.       JNZ L91
  395.       SETB SC10#
  396.       SJMP LA0
  397. L91:  CJNE A,#100,L92
  398.       CLR SC10#
  399.       SJMP LA0
  400. L92:  JB 0AH,L93
  401.       CLR SC10#
  402.       DEC 59H
  403.       MOV A,59H
  404.       JNZ LA0
  405.       CLR C
  406.       MOV A,#100
  407.       SUBB A,39H
  408.       MOV 59H,A
  409.       SETB 0AH
  410. L93:  SETB SC10#
  411.       DEC 59H
  412.       MOV A,59H
  413.       JNZ LA0
  414.       MOV 59H,39H
  415.       CLR 0AH

  416. LA0:  MOV A,3AH
  417.       JNZ LA1
  418.       SETB SC11#
  419.       SJMP LB0
  420. LA1:  CJNE A,#100,LA2
  421.       CLR SC11#
  422.       SJMP LB0
  423. LA2:  JB 0BH,LA3
  424.       CLR SC11#
  425.       DEC 5AH
  426.       MOV A,5AH
  427.       JNZ LB0
  428.       CLR C
  429.       MOV A,#100
  430.       SUBB A,3AH
  431.       MOV 5AH,A
  432.       SETB 0BH
  433. LA3:  SETB SC11#
  434.       DEC 5AH
  435.       MOV A,5AH
  436.       JNZ LB0
  437.       MOV 5AH,3AH
  438.       CLR 0BH

  439. LB0:  MOV A,3BH
  440.       JNZ LB1
  441.       SETB SC12#
  442.       SJMP LC0
  443. LB1:  CJNE A,#100,LB2
  444.       CLR SC12#
  445.       SJMP LC0
  446. LB2:  JB 0CH,LB3
  447.       CLR SC12#
  448.       DEC 5BH
  449.       MOV A,5BH
  450.       JNZ LC0
  451.       CLR C
  452.       MOV A,#100
  453.       SUBB A,3BH
  454.       MOV 5BH,A
  455.       SETB 0CH
  456. LB3:  SETB SC12#
  457.       DEC 5BH
  458.       MOV A,5BH
  459.       JNZ LC0
  460.       MOV 5BH,3BH
  461.       CLR 0CH

  462. LC0:  MOV A,3CH
  463.       JNZ LC1
  464.       SETB SC13#
  465.       SJMP LD0
  466. LC1:  CJNE A,#100,LC2
  467.       CLR SC13#
  468.       SJMP LD0
  469. LC2:  JB 0DH,LC3
  470.       CLR SC13#
  471.       DEC 5CH
  472.       MOV A,5CH
  473.       JNZ LD0
  474.       CLR C
  475.       MOV A,#100
  476.       SUBB A,3CH
  477.       MOV 5CH,A
  478.       SETB 0DH
  479. LC3:  SETB SC13#
  480.       DEC 5CH
  481.       MOV A,5CH
  482.       JNZ LD0
  483.       MOV 5CH,3CH
  484.       CLR 0DH

  485. LD0:  MOV A,3DH
  486.       JNZ LD1
  487.       SETB SC14#
  488.       SJMP LE0
  489. LD1:  CJNE A,#100,LD2
  490.       CLR SC14#
  491.       SJMP LE0
  492. LD2:  JB 0EH,LD3
  493.       CLR SC14#
  494.       DEC 5DH
  495.       MOV A,5DH
  496.       JNZ LE0
  497.       CLR C
  498.       MOV A,#100
  499.       SUBB A,3DH
  500.       MOV 5DH,A
  501.       SETB 0EH
  502. LD3:  SETB SC14#
  503.       DEC 5DH
  504.       MOV A,5DH
  505.       JNZ LE0
  506.       MOV 5DH,3DH
  507.       CLR 0EH

  508. LE0:  MOV A,3EH
  509.       JNZ LE1
  510.       SETB SC15#
  511.       SJMP LF0
  512. LE1:  CJNE A,#100,LE2
  513.       CLR SC15#
  514.       SJMP LF0
  515. LE2:  JB 0FH,LE3
  516.       CLR SC15#
  517.       DEC 5EH
  518.       MOV A,5EH
  519.       JNZ LF0
  520.       CLR C
  521.       MOV A,#100
  522.       SUBB A,3EH
  523.       MOV 5EH,A
  524.       SETB 0FH
  525. LE3:  SETB SC15#
  526.       DEC 5EH
  527.       MOV A,5EH
  528.       JNZ LF0
  529.       MOV 5EH,3EH
  530.       CLR 0FH

  531. LF0:  MOV A,3FH
  532.       JNZ LF1
  533.       SETB SC16#
  534.       SJMP LFA
  535. LF1:  CJNE A,#100,LF2
  536.       CLR SC16#
  537.       SJMP LFA
  538. LF2:  JB 10H,LF3
  539.       CLR SC16#
  540.       DEC 5FH
  541.       MOV A,5FH
  542.       JNZ LFA
  543.       CLR C
  544.       MOV A,#100
  545.       SUBB A,3FH
  546.       MOV 5FH,A
  547.       SETB 10H
  548. LF3:  SETB SC16#
  549.       DEC 5FH
  550.       MOV A,5FH
  551.       JNZ LFA
  552.       MOV 5FH,3FH
  553.       CLR 10H

  554. LFA:  MOV A,40H
  555.       JNZ LF10
  556.       SETB SC17#
  557.       SJMP LFB
  558. LF10: CJNE A,#100,LF11
  559.       CLR SC17#
  560.       SJMP LFB
  561. LF11: JB 11H,LF12
  562.       CLR SC17#
  563.       DEC 60H
  564.       MOV A,60H
  565.       JNZ LFB
  566.       CLR C
  567.       MOV A,#100
  568.       SUBB A,40H
  569.       MOV 60H,A
  570.       SETB 11H
  571. LF12: SETB SC17#
  572.       DEC 60H
  573.       MOV A,60H
  574.       JNZ LFB
  575.       MOV 60H,40H
  576.       CLR 11H

  577. LFB:  MOV A,41H
  578.       JNZ LF20
  579.       SETB SC18#
  580.       SJMP LFC
  581. LF20: CJNE A,#100,LF21
  582.       CLR SC18#
  583.       SJMP LFC
  584. LF21: JB 12H,LF22
  585.       CLR SC18#
  586.       DEC 61H
  587.       MOV A,61H
  588.       JNZ LFC
  589.       CLR C
  590.       MOV A,#100
  591.       SUBB A,41H
  592.       MOV 61H,A
  593.       SETB 12H
  594. LF22: SETB SC18#
  595.       DEC 61H
  596.       MOV A,61H
  597.       JNZ LFC
  598.       MOV 61H,41H
  599.       CLR 12H

  600. LFC:  MOV A,42H
  601.       JNZ LF30
  602.       SETB SC19#
  603.       SJMP LFD
  604. LF30: CJNE A,#100,LF31
  605.       CLR SC19#
  606.       SJMP LFD
  607. LF31: JB 13H,LF32
  608.       CLR SC19#
  609.       DEC 62H
  610.       MOV A,62H
  611.       JNZ LFD
  612.       CLR C
  613.       MOV A,#100
  614.       SUBB A,42H
  615.       MOV 62H,A
  616.       SETB 13H
  617. LF32: SETB SC19#
  618.       DEC 62H
  619.       MOV A,62H
  620.       JNZ LFD
  621.       MOV 62H,42H
  622.       CLR 13H

  623. LFD:  MOV A,43H
  624.       JNZ LF40
  625.       SETB SC20#
  626.       SJMP LFE
  627. LF40: CJNE A,#100,LF41
  628.       CLR SC20#
  629.       SJMP LFE
  630. LF41: JB 14H,LF42
  631.       CLR SC20#
  632.       DEC 63H
  633.       MOV A,63H
  634.       JNZ LFE
  635.       CLR C
  636.       MOV A,#100
  637.       SUBB A,43H
  638.       MOV 63H,A
  639.       SETB 14H
  640. LF42: SETB SC20#
  641.       DEC 63H
  642.       MOV A,63H
  643.       JNZ LFE
  644.       MOV 63H,43H
  645.       CLR 14H


  646. LFE:  MOV A,44H
  647.       JNZ LF50
  648.       SETB SC21#
  649.       SJMP LFF
  650. LF50: CJNE A,#100,LF51
  651.       CLR SC21#
  652.       SJMP LFF
  653. LF51: JB 15H,LF52
  654.       CLR SC21#
  655.       DEC 64H
  656.       MOV A,64H
  657.       JNZ LFF
  658.       CLR C
  659.       MOV A,#100
  660.       SUBB A,44H
  661.       MOV 64H,A
  662.       SETB 15H
  663. LF52: SETB SC21#
  664.       DEC 64H
  665.       MOV A,64H
  666.       JNZ LFF
  667.       MOV 64H,44H
  668.       CLR 15H

  669. LFF:  MOV A,45H
  670.       JNZ LF60
  671.       SETB SC22#
  672.       SJMP LFG
  673. LF60: CJNE A,#100,LF61
  674.       CLR SC22#
  675.       SJMP LFG
  676. LF61: JB 16H,LF62
  677.       CLR SC22#
  678.       DEC 65H
  679.       MOV A,65H
  680.       JNZ LFG
  681.       CLR C
  682.       MOV A,#100
  683.       SUBB A,45H
  684.       MOV 65H,A
  685.       SETB 16H
  686. LF62: SETB SC22#
  687.       DEC 65H
  688.       MOV A,65H
  689.       JNZ LFG
  690.       MOV 65H,45H
  691.       CLR 16H

  692. LFG:  MOV A,46H
  693.       JNZ LF70
  694.       SETB SC23#
  695.       SJMP LFH
  696. LF70: CJNE A,#100,LF71
  697.       CLR SC23#
  698.       SJMP LFH
  699. LF71: JB 17H,LF72
  700.       CLR SC23#
  701.       DEC 66H
  702.       MOV A,66H
  703.       JNZ LFH
  704.       CLR C
  705.       MOV A,#100
  706.       SUBB A,46H
  707.       MOV 66H,A
  708.       SETB 17H
  709. LF72: SETB SC23#
  710.       DEC 66H
  711.       MOV A,66H
  712.       JNZ LFH
  713.       MOV 66H,46H
  714.       CLR 17H

  715. LFH:  MOV A,47H
  716.       JNZ LF80
  717.       SETB SC24#
  718.       SJMP LFI
  719. LF80: CJNE A,#100,LF81
  720.       CLR SC24#
  721.       SJMP LFI
  722. LF81: JB 18H,LF82
  723.       CLR SC24#
  724.       DEC 67H
  725.       MOV A,67H
  726.       JNZ LFI
  727.       CLR C
  728.       MOV A,#100
  729.       SUBB A,47H
  730.       MOV 67H,A
  731.       SETB 18H
  732. LF82: SETB SC24#
  733.       DEC 67H
  734.       MOV A,67H
  735.       JNZ LFI
  736.       MOV 67H,47H
  737.       CLR 18H
  738. ;------------------------------------
  739. ;等待10mS到
  740. ;------------------------------------
  741. LFI:  LCALL DISP          ;调用显示程序
  742. L123: MOV A,6FH
  743.       MOV KMWDT,#00111100B;设置看门狗
  744.       CJNE A,#01H,L123
  745.       MOV 6FH,#00H
  746.       LJMP L1

  747. ;------------------------------------
  748. z;显示转化程序,48H放区域值,49H放到参数值,转换后6AH放区域值高位,
  749. ;6BH放区域值低位,6CH、6DH、6EH放参数值,
  750. ;------------------------------------
  751. LEDXS1:MOV B,#10          ;显示程序,为拆分计数值送显示器作准备
  752.       MOV A,48H           ;余数作个位
  753.       DIV AB              ;将计数值除以10,高位进A,余数进B
  754.       MOV 6BH,B
  755.       JNZ LOOP1
  756.       MOV 6AH,#10
  757.       SJMP LOOP2
  758. LOOP1:MOV 6AH,A

  759. LOOP2:MOV A,#2FH
  760.       ADD A,48H
  761.       MOV R1,0E0H
  762.       MOV 49H,@R1
  763.       MOV B,#10           ;显示程序,为拆分计数值送显示器作准备
  764.       MOV A,49H           ;余数作个位
  765.       DIV AB              ;将计数值除以10,高位进A,余数进B
  766.       MOV 6EH,B
  767.       MOV B,#10
  768.       DIV AB
  769.       MOV 6DH,B
  770.       JNZ LOOP3
  771.       MOV 6CH,#10
  772.       SJMP LOOP4
  773. LOOP3:MOV 6CH,A
  774. LOOP4:LCALL DISP
  775.       RET

  776. ;------------------------------------
  777. ;显示程序
  778. ;------------------------------------

  779. DISP: SETB XS1A2          ;P3.0端口置1
  780.       SETB XSCLK          ;P3.1端口置1
  781.       MOV SCON,#00H       ;初始化串行口方式0
  782.       MOV R2,#05H         ;显示5位数
  783.       MOV R1,#6EH         ;60H-65H为显示缓冲区
  784.       MOV DPTR,#SETTAB    ;字形表的入口地址
  785. L00P: MOV A,@R1           ;取最高位的待显示数据
  786.       MOVC A,@A+DPTR      ;查表获取字形码
  787.       MOV SBUF,A          ;送串口显示
  788. DELAY:JNB TI,DELAY        ;等待发送完毕
  789.       CLR TI              ;清发送标志
  790.       DEC R1              ;指针下移一位,准备取下一个待显示数
  791.       DJNZ R2,L00P        ;直到6个数据全显示完。
  792.       CLR XS1A2           ;P3.0端口置0
  793.       CLR XSCLK           ;P3.1端口置0
  794.       RET
  795. SETTAB:DB 03H 9FH 25H 0DH 99H 49H 41H 1FH 01H 09H 0FFH

  796.                           ; 0 1 2 3 4 5 6 7 8 9 消隐码

  797. ;------------------------------------
  798. ;10mS时间中断
  799. ;------------------------------------

  800. INTT0:PUSH ACC            ;10mS时间中断
  801.       PUSH PSW
  802.       MOV TH0,#0D8H       ;重置时间参数为10mS(晶振为12M)
  803.       MOV TL0,#0F0H
  804.       MOV KMWDT,#00111100B;设置看门狗
  805.       MOV 6FH,#01H        ;6FH为10mS时间到标志
  806.       POP PSW
  807.       POP ACC
  808.       RETI


  809. YS1:  MOV R6,#70H         ;延时子程序
  810. Y10:  MOV R7,#0FFH
  811. Y11:  NOP
  812.       NOP
  813.       NOP
  814.       DJNZ R7,Y11
  815.       MOV KMWDT,#00111100B;设置看门狗
  816.       DJNZ R6,Y10
  817.       RET

  818. ;------------------------------------
  819. ;EEPROM操作程序
  820. ;------------------------------------
  821. ;-----------------------------------------------------
  822. ;写N字节数据子程序
  823. ;-----------------------------------------------------
  824. WRITE_DATA:
  825.          MOV R0,#00H         ;数据写入首地址
  826.          MOV R1,#30H         ;
  827. WR_LOOP: MOV B,@R1
  828.          LCALL WRITE_BYTE    ;将查表结果写入24C02
  829.          INC R0              ;地址+1
  830.          INC R1
  831.          MOV KMWDT,#00111100B;设置看门狗
  832.          CJNE R1,#48H,WR_LOOP;24个数写入完毕?
  833.          RET

  834. ;-----------------------------------------------------
  835. ;读N字节数据子程序
  836. ;从24C02读出数据
  837. ;-----------------------------------------------------

  838. READ_DATA:
  839.          MOV R0,#00H         ;设定读取的初始地址
  840.          MOV R1,#30H         ;
  841. RE_LOOP: LCALL READ_BYTE     ;读EEPROM
  842.          MOV KMWDT,#00111100B;设置看门狗
  843.          LCALL STOP
  844.          MOV @R1,A
  845.          INC R0              ;地址+1
  846.          INC R1
  847.          CJNE R1,#48H,RE_LOOP;24个数写入完毕?
  848.          RET

  849. ;----------------------------------------------------
  850. ;写操作子程序
  851. ;输入参数: R0---要写入的地址,B---要写入的数据
  852. ;----------------------------------------------------
  853. WRITE_BYTE:
  854.        LCALL START

  855.        MOV A,#0A0H
  856.        LCALL  SENDBYTE
  857.        LCALL  WAITACK
  858.        MOV KMWDT,#00111100B ;设置看门狗

  859.        MOV A,R0
  860.        LCALL SENDBYTE
  861.        LCALL  WAITACK

  862.        MOV A,B
  863.        LCALL SENDBYTE
  864.        LCALL  WAITACK
  865.        LCALL STOP

  866.        LCALL DELAY_5MS      ;每写入1个字节,延时若干MS
  867.        RET
  868. ;----------------------------------------------------
  869. ;读操作子程序
  870. ;输入参数:R0---要读的字节地址,
  871. ;输出参数: A---结果
  872. ;----------------------------------------------------
  873. READ_BYTE:
  874.        LCALL START
  875.        MOV A,#0A0H
  876.        LCALL SENDBYTE
  877.        LCALL  WAITACK

  878.        MOV A,R0
  879.        LCALL SENDBYTE
  880.        LCALL  WAITACK

  881.        LCALL START
  882.        MOV A,#0A1H
  883.        LCALL SENDBYTE
  884.        LCALL  WAITACK
  885.        LCALL  RCVBYTE
  886.        RET
  887. ;-----------------------------------------------------
  888. ;从IIC总线上接收一个字节数据
  889. ;出口参数:A---接收数据存放在A中
  890. ;-----------------------------------------------------
  891. RCVBYTE:
  892.        MOV R7,#08        ;一个字节共接收8位数据
  893.        CLR  A
  894.        SETB  SDA         ;释放SDA数据线
  895. R_BYTE:
  896.        CLR  SCL
  897.        NOP
  898.        NOP
  899.        NOP
  900.        NOP
  901.        SETB SCL          ;启动一个时钟周期,读总线
  902.        NOP
  903.        NOP
  904.        NOP
  905.        NOP
  906.        MOV C,SDA         ;将SDA状态读入C
  907.        RLC A             ;结果移入A
  908.        SETB  SDA         ;释放SDA数据线
  909.        DJNZ R7,R_BYTE    ;判断8位数据是否接收完全?
  910.        RET
  911. ;----------------------------------------------------
  912. ;向IIC总线发送一个字节数据
  913. ;入口参数:A---待发送数据存放在A中
  914. ;----------------------------------------------------
  915. SENDBYTE:
  916.        MOV R7,#08
  917. S_BYTE:
  918.        RLC A
  919.        MOV SDA,C
  920.        SETB SCL
  921.        NOP
  922.        NOP
  923.        NOP
  924.        NOP
  925.        CLR SCL
  926.        DJNZ R7,S_BYTE   ;8位发送完毕?
  927.        RET
  928. ;-----------------------------------------------------
  929. ;等待应答信号
  930. ;等待从机返回一个响应信号
  931. ;-----------------------------------------------------
  932. WAITACK:
  933.        CLR  SCL
  934.        SETB SDA         ;释放SDA信号线
  935.        NOP
  936.        NOP
  937.        SETB SCL
  938.        NOP
  939.        NOP
  940.        NOP
  941.        MOV C,SDA
  942.        JC  WAITACK      ;SDA为低电平,返回了响应信号
  943.        CLR  SDA
  944.        CLR  SCL
  945.        RET
  946. ;----------------------------------------------------
  947. ;启动信号子程序
  948. ;----------------------------------------------------
  949. START:
  950.        SETB SDA
  951.        SETB SCL
  952.        NOP
  953.        CLR SDA
  954.        NOP
  955.        NOP
  956.        NOP
  957.        NOP
  958.        CLR SCL
  959.        RET
  960. ;----------------------------------------------------
  961. ;停止信号子程序
  962. ;----------------------------------------------------
  963. STOP:  MOV KMWDT,#00111100B;设置看门狗
  964.        CLR SDA
  965.        NOP
  966.        SETB SCL
  967.        NOP
  968.        NOP
  969.        NOP
  970.        NOP
  971.        SETB SDA
  972.        NOP
  973.        NOP
  974.        CLR  SCL
  975.        CLR  SDA
  976.        RET
  977. ;----------------------------------------------------
  978. ;延时5MS子程序
  979. ;输入参数:5MS
  980. ;输出参数: 无
  981. ;影响资源: R5,R6等
  982. ;----------------------------------------------------
  983. DELAY_5MS:
  984.       MOV R6,#10
  985. DE_LP:
  986.       MOV R5,#250
  987.       DJNZ R5,$
  988.       MOV KMWDT,#00111100B;设置看门狗
  989.       DJNZ R6,DE_LP
  990.       RET


  991. ;------------------------------------
  992. ;软件陷阱
  993. ;------------------------------------
  994.       ORG 0B00H           ;软件陷阱
  995.       NOP
  996.       NOP
  997.       NOP
  998.       LJMP KS   

  999.       END
复制代码


回复

使用道具 举报

ID:7485 发表于 2014-12-29 19:36 | 显示全部楼层
有些地方使用循环应该可以精简代码。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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