📄 commu.asm
字号:
;====================================================================
;Procedure name: key_dsp.asm
;The date of development: 2002.05
;Crystal Oscillator: 11.0592MHz
;Microcontroller: AT89C51 (Producted by ATEMEL Corporation)
;Developing devices: Personal Computer(486DX);EMP-100A;Avsim51
;Author: Lixiufeng
;====================================================================
;----------------------------------------------------------------
;//define all the pins of the Microcontrollor(AT89C51)
d0a bit p0.0 ;data 0 and address 0 in paralell port
d1a bit p0.1 ;
d2a bit p0.2 ;
d3a bit p0.3 ;
d4a bit p0.4 ;
d5a bit p0.5 ;
d6a bit p0.6 ;
d7a bit p0.7 ;data 7 and address 7
ask4 bit p1.0 ;来自主控机信号4
ask5 bit p1.1 ;来自主控机信号5
ask6 bit p1.2 ;来自主控机信号6
ask7 bit p1.3 ;来自主控机信号7
ans4 bit p1.4 ;发送到主控机信号4
ans5 bit p1.5 ;发送到主控机信号5
ans6 bit p1.6 ;发送到主控机信号6
ans7 bit p1.7 ;发送到主控机信号7
re bit p2.0 ;来自485的信号接收使能,低电平有效
de bit p2.1 ;发往485的信号发送使能,高电平有效
comi bit p2.2 ;请求主控机中断
dira bit p2.3 ;数据传输方向,1表示主控机到专网通讯机
; bit p2.4 ;
; bit p2.5 ;
; bit p2.6 ;
; bit p2.7 ;
comin bit p3.0 ;串行通讯输入
comout bit p3.1 ;串行通讯输出
_int0 bit p3.2 ;
; bit p3.3 ;
; bit p3.4 ;
; bit p3.5 ;
; bit p3.6 ;
; bit p3.7 ;
;--------------------------------------------------------------------
;//define the flag
;--------------------------------------------------------------------
conflag equ 24h ;for cycle
out_cpu_f bit 20h ; 表示mcpu有数据输出
common_dsp bit 21h
other_dsp bit 22h
star_dsp bit 23h ; display star or number
number_f bit 24h ; number key is pressed
mode_state equ 25h
common_f bit 28h
config_f bit 29h ;0 represent 1
adjust_f bit 2ah ;show communication state
alarm_f bit 2bh ;
time_f bit 2ch ;
password_f bit 2dh
key_state1 equ 26h ;keys in first colume
k_7_f bit 30h ;7
k_8_f bit 31h ;8
k_9_f bit 32h ;9
k_u_f bit 33h ;up
k_4_f bit 34h ;4
k_5_f bit 35h ;5
k_6_f bit 36h ;6
k_d_f bit 37h ;down
key_state2 equ 27h ;keys in second colume
k_1_f bit 38h ;1
k_2_f bit 39h ;2
k_3_f bit 3ah ;3
k_m_f bit 3bh ;mode
k_0_f bit 3ch ;0
k_p_f bit 3dh ;point
k_s_f bit 3eh ;sign
k_c_f bit 3fh ;confirm
serial_f equ 28h
d_start_f bit 40h
connect_f bit 41h ; 与远程计算机接通标志
send_f bit 42h ;为1表示送数成功
receive_m bit 43h ;接收信息模式,1为送数后的返回信息
;0为接收"*xxxxxxx+回车"信息模式
receive_f bit 44h ; 接收状态, 1为有数据输入
display_f equ 29h
com_dat_f bit 48 ;0 means command, 1 means data
; equ 2ah
;-----------------------------------------------------------------
;//define the RAM region
;-----------------------------------------------------------------
data_num equ 30h
cursor_in equ 31h
counter1 equ 32h
counter2 equ 33h
; equ 34h
; equ 35h
; equ 36h
; equ 37h
data1 equ 38h
data2 equ 39h
data3 equ 3ah
data4 equ 3bh
data5 equ 3ch
data6 equ 3dh
data7 equ 3eh
data8 equ 3fh
dsp_hz0 equ 40h
dsp_hz1 equ 41h
dsp_hz2 equ 42h
dsp_hz3 equ 43h
dsp_hz4 equ 44h
dsp_hz5 equ 45h
dsp_hz6 equ 46h
dsp_hz7 equ 47h
dsp_hz8 equ 48h
dsp_hz9 equ 49h
dsp_hz10 equ 4ah
dsp_hz11 equ 4bh
dsp_hz12 equ 4ch
dsp_hz13 equ 4dh
dsp_hz14 equ 4eh
dsp_hz15 equ 4fh
delay1 equ 50h ;
delay2 equ 51h ;
delay3 equ 52h ;
re_num equ 53h ;received number of byte after "*"
dsp_dat1 equ 54h
dsp_dat2 equ 55h
dsp_com equ 56h
u12 equ 57h ;输出芯片u12的数值
cursor_p equ 58h
page_num equ 59h ;页码序号
rscbufft equ 5ah
; equ 5bh
; equ 5ch
; equ 5dh
; equ 5eh
; equ 5fh
;//定义指令byte2(具体操作码)
sd_volt data 0 ; 送电压值(临时)
sd_ee data 24 ; 送eeprom
wt_ee_done data 33 ; 写eeprom完成
wt_ee data 34 ; 写eeprom, 数据:高位地址\低位地址\字节数值
rd_ee data 35 ; 读eeprom
re_var data 36 ; 接收参数,\36\页码行码\3字节数值
; #0000fah=N,#0000fb=Y, #xxxxh.xxh
sd_var data 37 ; 送参数,\37\页码行码\3字节数值
; #0000fah=N,#0000fb=Y, #xxxxh.xxh
sd_com_done data 38 ; 送出指令到NC完成
cont_com data 39 ; 上位机要求连接
discont_com data 40 ; 上位机要求断开
rd_mb_date data 41 ; 读监控器日期
sd_mb_date data 42 ; 送监控器日期
;//通讯数据格式定义
; 主机 -> NC_COM -> 设备(主机 -> NC_COM 缺1、8、9项)
; 写eeprom: * 3位设备地址+5位高位地址 34 低位地址 三字节数据 6项之和 回车
; 读eeprom: * 3位设备地址+5位高位地址 35 低位地址 0 0 0 6项之和 回车
; 设备 -> NC_COM -> 主机
; 送eeprom内容: * 3位设备地址+5位高位地址 24 低位地址 三字节数据 6项之和 回车
; 写eeprom完成: * 0 33 0000 6项之和 回车
;
; 上位机->COM->主机
;
;--------------------------------------------------------------
;//define the data used in the procedure.
_stack data 60h ;stack pointer=60h
time_num1 data 1 ;
time_num2 data 2 ;
time_num5 data 5 ;
time_num10 data 10 ;
time_num20 data 20 ;
time_num50 data 50 ;
time_num100 data 100 ;
dspbuffxlenth data 4 ;
dspbuffylenth data 4 ;
decbufflenth data 4 ;
hexbufflenth data 4 ;
b_rate data 0fdh ;baud rate : 9600bps.
;--------------------------------------------------------------
;//define the display data symbol for the purpose of reading.
;**************************************************************
; MAIN PROGRAM
; (General board for the Optical Sensor and SCARA)
;**************************************************************
org 0
sjmp main ;main procedure entry.
org 0003h ;int0 keyboard interrupt entrance.
ljmp re_cpu
; org 000bh
; ljmp timer_0 ;t0 int_procedure entry.
; org 0013h
; ajmp menu ;int1 int_procedure entry.
; org 001bh ;t1 entrance.
org 0023h ;serial entrance.
ljmp serial
;==================================================================
;name: main procedure
;number:
;used resoures:
;algorithm:
;------------------------------------------------------------------
org 30h
main: mov sp,#_stack
;//set stack pointer "#_stack",stack amount:32byte.
mov r0,#20h ;initialize the clr_pointer.
mov r1,#64 ;endow "R1" with initial value.
main_clr_RAM: mov @r0,#0
inc r0
djnz r1,main_clr_RAM
;//clear the used RAM region from 20h to 5fh(64byte).
mov scon,#11010000b ;set serial communicating mode.
mov tmod,#00100001b ;set T1 mode for rs232c.
mov tl1,#b_rate ;baud rate:9600bps(0fdh).
mov th1,#b_rate
mov th0, #080h
mov tl0, #080h
setb tr0
setb tr1 ;start timer1
clr it0 ;low voltage trig int0
clr it1 ;low voltage trig int1
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
lcall delay50ms
; lcall sd_cpu
clr re ; 允许485数据输入
clr receive_m ; 接收数据
clr connect_f
setb ea ;enable interrupt.
setb es ;enable serial interrupt
setb ex0 ;enable int0
setb ex1 ;enable int1
; setb et0 ; enable t0
main_loop: nop
jnb receive_f, out_computer
jb connect_f, cont_case ; 收到远程计算机数据
mov a, data3
cjne a, #cont_com, out_computer; 未接通数据不转送
setb connect_f
ljmp sd_com_mb
cont_case: mov a, data3 ; 与上位机接通的情况
cjne a, #discont_com, sd_com_mb
clr connect_f
sd_com_mb: lcall sd_cpu
clr receive_f
out_computer: jnb out_cpu_f, main_le
lcall data_out
clr out_cpu_f
main_le: ljmp main_loop
;******************************************************************
; SERIAL COMMUNICATION SUB_PROGRAM
;******************************************************************
;==================================================================
;name: serial
;number:
;used resoures: internal:acc
;
;algorithm:
;entry: No
;exit:
;------------------------------------------------------------------
serial: clr tr0
clr ea
push psw
push r0
lcall read_rsc_port
serial_exit: pop r0
pop psw
setb ea
setb tr0
reti
;==================================================================
;name: read_rsc_port
;number:
;used resoures: internal:acc
; lcall ls164k
;algorithm:
;entry: No
;exit:
;------------------------------------------------------------------
read_rsc_port: push psw
push acc
jnb ri, $
clr ri
jnb receive_m, read_rsc_n
mov a, sbuf ;读"#y"
;判断送出的数据是否正常接收
cjne a, #35, read_rsc_y1 ; #
mov dsp_hz0, a
read_rsc_y2: ljmp read_exit
read_rsc_y1: mov r2, dsp_hz0
cjne r2, #35, read_rsc_y2
cjne a, #121, read_rsc_y3 ; y
setb send_f ;送数成功
read_rsc_y3: mov dsp_hz0, #0
ljmp read_exit
;读"*xxxxxxx+回车键", 正确时返回"#y"
; 九个数值存放在data1~dsp_hz0中
read_rsc_n: mov a, sbuf ; read serial port
jb d_start_f, read_rsc_1
cjne a, #42, read_exit ; first data is not "*"
setb d_start_f ; start to read
mov data_num, #data1 ; 存放数值起始位置
read_rsc_1: mov r0, data_num
cjne r0, #dsp_hz0, read_rsc_11 ; 存放数值终了位置
cjne a, #13, read_rsc_4 ; 送数出错
sjmp read_rsc_3 ; 第九个字符为回车键
read_rsc_11: mov @r0, a ; 赋值
inc data_num
sjmp read_exit
read_rsc_3: mov a, data2
add a, data3
add a, data4
add a, data5
add a, data6
add a, data7
clr c
subb a, data8
clr acc.7 ; 128表示0
cjne a, #0, read_rsc_4
mov rscbufft, #35 ;send "#"
lcall send_rsc_port
mov rscbufft, #121 ;send "y"
lcall send_rsc_port
mov rscbufft, #35 ;send "#"
lcall send_rsc_port
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -