用单片机实现温度远程显示 第6页

 

用单片机实现温度远程显示 第6页

十、附录(源程序)

1、主模块(rand_main.a51

;------------1--------rand_main.a51----------------

name rand_main

EXTRN CODE(I_T0,send_order,rec_si,ascii_bcd,key)

extrn data (DISP_buf,disp_wc,time_20ms,wdt)

extrn idata (rec_buf)

public TH0_H,TL0_L,START,ri_f,wdt_time,key_work,key_f

prog SEGMENT CODE           ;定义代码段

byte_buff segment data      ;定义字节数据段1

byte_buffI segment idata    ;定义字节数据段2

bit_buff segment data bitaddressable ;定义位数据段

bit_flag segment bit

stack segment idata         ;定义堆栈数据段

     rseg stack         ;为堆栈保留20个字节

     ds 20

     CSEG AT 00H        ;定义绝对代码段

     USING 0            ;选择工作寄存器组第0

     lJMP rand          ;复位时程序执行执行点

     CSEG AT 03H        ;外部中断0

     RETI

     CSEG AT 0BH        ;定时器0中断

     lJMP I_T0

     CSEG AT 13H        ;外部中断1

     ljmp key

     RETI

     CSEG AT 1BH        ;定时器1中断

     RETI

     CSEG AT 23H        ;串行中断

     ljmp rec_si

     RSEG BYTE_BUFF

     td_temp: ds 1

     TD_n: DS 1         ;通道号

     YD_n100: ds 1      ;仪表地址

;----------------------------------

     rseg bit_flag

     key_work:dbit 1

     ri_f: dbit 1       ;串行口正在接收标志

;----主程序

     RSEG prog

;------------------------------符号定义

     key_f equ p3.3

     key_up equ p3.4

     key_down equ p3.5

     wdt_time equ 100       ;软件看门狗定时器计数值

     scon_c equ 01010000b   ;串行口设置为10UART,允许接收

     th1_h equ 0fdh         ;晶振为11.0592M,波特率为9600时初值

     tmod_n equ 21h         ;设置定时器(T1作为波特率发生器工作在模式2T0为模式1

     ie_n equ 82h           ;设置串行,定时器0中断

     ip_n equ 12h           ;设置串行,定时器0中断为高级中断

     TH0_H EQU 0FCH

     TL0_L EQU 06BH         ;设定定时器01MS中断初值

;------------------初始化代码

clear_wdt macro             ;清硬看门狗宏定义

     orl 96h,#2

     ENDM

rand:    ORL 96H,#0E1H      ;启动硬件看门狗

     mov p0,#0ffh

     mov r0,#20h

     mov a,#0

start_300:mov @r0,a

     inc r0

     cjne r0,#128,start_300

     setb key_work      ;置巡回/定点标志

     mov p3,#0ffh

     mov p2,#0ffh

     mov disp_wc,#0         ;初始化闪烁控制位

     mov ip,#ip_n       ;设置串行,定时器0中断为高级中断

     mov scon,#scon_c

     MOV TMOD,#tmod_n  

     MOV TH0,#TH0_H         ;设定定时器初值

     MOV TL0,#TL0_L

     mov th1,#th1_h

     mov tl1,#th1_h

     mov ie,#ie_n

     mov pcon,#0

     SETB tr1

     SETB TR0

;-------显示初始化提示

     acall chuhao

     CLEAR_WDT    

start:   clr ea

     mov sp,#stack-1

     setb ea

     clr ri_f      ;清接收中标志

     clr p3.2      ;75176为接收状态

     jnb key_work,db_work

;-----------------------------------

     setb ex1

     mov yd_n100,#0ah

     mov td_n,#0

s_0: anl disp_wc,#0f0h

     mov wdt,#0         ;清看门狗定时器

     clear_wdt

     mov a,yd_n100

     lcall send_order

     JNZ s_1

     mov disp_buf+5,yd_n100

     mov a,td_n

     lcall ascii_bcd

     jnz s_2

     mov disp_buf+4,td_n

     acall mov_to_disp

     mov wdt,#0

     clear_wdt

     mov a,#75

     add a,time_20ms

     cjne a,time_20ms,$

     mov wdt,#0

     clear_wdt

     mov a,#75

     add a,time_20ms

     cjne a,time_20ms,$

s_2: inc td_n

     mov a,td_n

     cjne a,#8,s_0

     mov td_n,#0

s_1: inc yd_n100

     MOV A,YD_N100

     cjne a,#10h,s_0

     mov yd_n100,#0ah

     ajmp s_0

;-----------------------------

db_work:setb ex1

     orl disp_wc,#01h

d_3: mov wdt,#0         ;清看门狗定时器

     clear_wdt

     jb key_up,d_4

     mov a,#2

     add a,time_20ms

     cjne a,time_20ms,$

     jb key_up,d_4

d_5: mov wdt,#0

     clear_wdt

     jnb key_up,d_5         ;等待向上键松开

;------------------------------------------------

d_53:    mov a,td_n

     cjne a,#7,d_50

     mov td_n,#0

d_52:    inc yd_n100

     mov a,yd_n100

     cjne a,#10h,d_51

     mov yd_n100,#0ah

     ajmp d_51

d_50:    inc td_n

d_51:    mov a,yd_n100

     lcall send_order

     JNZ d_52

     mov disp_buf+5,yd_n100

     mov a,td_n

     lcall ascii_bcd

     jnz d_53

     mov disp_buf+4,td_n

     acall mov_to_disp

     mov a,#100         ;2秒钟定时设定

     add a,time_20ms

     ajmp d_3

;------------------------------------------------

d_4: jb key_down,d_10

     mov a,#2

     add a,time_20ms

     cjne a,time_20ms,$

     jb key_down,d_3

d_6: mov wdt,#0

     clear_wdt

     jnb key_down,d_6   ;等待向下键松开

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有