稳压输出与同步显示电路的单片机源程序
[ 06年06月10日 ] 浏览次数:888

  采用 AT89C2051控制稳压输出与同步显示的电路源程序 ORG  0000H START: AJMP MAIN TAB1:  DB  128,64,32,16;Dn值表格 TAB2:  DB  0C0H,92H,0C0H,0C0H  ;数字0.5.0.0字段代码表 TAB3:  DB  0B0H,99H,82H,90H  ;数字3.4.6.9字段代码表 MAIN:  MOV  SCON,#0  ;设串行口模式0 SETB  P3.7 ; 接继电器实现极性状态改变,开始置P3.7=1 SETB  P3.4 ; 电压及显示控制按钮 SETB  P3.5 极性转换按钮 BEGIN:  MOV  SP, #60H MOV  23H,#0  ;送输出P1.7=1的Dn值指针 MOV 20H,#0  ;小数点一位指针指向“0”字符(20H是小数点的指针) MOV  21H,#0  ;个位指针指向“3”字符(21H是个位数点的指针) ACALL  DSP  ;调用显示、输出子程序 NOP JNB  P3.4,$ ACALL  DEL200 ; KEY1: JB  P3.4, KEY2 ;电压及显示键是否有键?    ACALL DEL10    JB  P3.4, KEY2    ACALL K1 ; KEY2: JB  P3.5, KEY1  ;极性转换键是否有键?    ACALL  DEL10    JB P3.5, KEY1    ACALL  K2    AJMP KEY1 ; DEL10: MOV  R6,#0DH  ;10ms延时子程序 D1MS1: MOV  R7,#0FFH DLL1:  DJNZ  R7, DLL1 DJNZ  R6, D1MS1 RET ; DEL200:  MOV  R3, #0FFH  ;200ms延时子程序 D1MS2:   MOV  R4, #0FFH DLL2:   DJNZ  R4, DLL2 DJNZ   R3, D1MS2 RET ; K1:  MOV  A,23H ;电压及显示键处理子程序    CJNE  A, #03H, REL1     AJMP BEGIN REL1:  INC  23H  INC  20H  INC  21H  ACALL DSP   NOP  JNB  P3.4,$  ACALL DEL200  NOP   RET ; K2:  CPL  P3.7 极性转换键处理子程序     JNB P3.5,$     ACALL  DEL200    NOP    RET ; DSP:  MOV  R7, #02  ;显示、输出子程序     MOV  R0, #20H    MOV  R1, #21H    MOV DPTR, #TAB2    MOV  A, @R0 DSP1:  MOVC  A, @A+DPTR      MOV  SBUF, A DSP2: JNB  TI, DSP2     CLR  TI     MOV  A, @R1      MOV  DPTR, #TAB3      DJNZ  R7, DSP1      MOV DPTR, #TAB1      MOV A, 23H     MOVC A, @A+DPTR     MOV P1, A      RET ;      END 源程序说明   程序中定义了三个表TAB1、TAB2、TAB3,分别存放P1口的数据、小数点后一位字符、个位字符。并且用23H、20H、21H分别作为P1口的数据、小数点后一位字符、个位字符的指针,指针开始时均指向“0”,即分别对应着128、0C0H、0B0H。 程序运行后,调用“显示/输出子程序”,在“显示/输出子程序”中依次执行:将字符“0”对应的代码“0C0H”发送、将字符“3”对应的代码“0B0H”发送、将P1口置为“128”(即表示P1.7—P1.0为10000000)。显然在“显示/输出子程序”中输出字符和置P1口的数据等,用的是查表指令MOVC  A,@A+DPTR,DPTR是数据指针,查表时采用DPTR作为基址寄存器,在该指令执行前,DPTR中存放表的起始地址(例如MOV  DPTR,#TAB2),A的内容(用MOV  R0,#20H和MOV  A,@R0两条指令完成)作为无符号数与DPTR的内容相加得到一个16位地址,由该地址指出的程序存储器的单元的内容送到累加器A中,再由MOV SBUF,A指令将字符对应的代码发送出去,同样对P1口数据的传送用指令MOV A,23H和MOVC  A,@A+DPTR以及MOV  P1,A完成。 程序在结束此次调用“显示/输出子程序”后,就反复扫描P3.4口和P3.5口,随时响应按键S1和S2的操作,如S1按下,则进入“S1处理子程序”,即“电压及显示键处理子程序”;如S2按下,则进入“S2处理子程序”即“极性转换键处理子程序”。 在“电压及显示键处理子程序”中,每执行一次该子程序,都是先将三个指针23H、20H、21H加1,然后调用“显示/输出子程序”,下面的过程是与开始一样的,只不过,由于指针改变而改变了相应代码,实现显示、稳压输出为“4.5、4.5V”→“6.0、6.0V” →“9.0、9.0V”→“3.0、3.0V”的循环过程。注意,当23H指针加到03H后,表明电路应回到起始状态,重新以“3.0、3.0V”开始,程序用CJNE A,#03H,ACTION1指令来控制,即当A中内容等于03H后,程序不会执行标号ACTION1开始的程序段,而是转到执行标号FW的程序段,回到起始状态。 在“极性转换键处理子程序”中,每执行一次该子程序,就对P3.7取反一次,实现极性转换 。

 

上海爱义电子设备有限公司 联系我们:aiyigs@sh163.net

(销售)200070 上海市共和新路288号308室(海鸥康恒大厦) 电话:63248485 传真:63248485

 

皮肤病医院 肝病网 癫痫病的治疗方法 肺癌的治疗 肝癌的治疗 癌症治疗 医答网 癌症的治疗 前列腺炎中医 痔疮的疗法 癌症 保险柜 保险柜 防辐射服 北京安装卫星天线 北京卫星天线安装 保险柜 保险柜 金蛇保险柜 保险柜直销 保险柜专卖 电子保险柜 小笑话 雄久久 看点网 测风塔 文件柜 汗蒸房