?? 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 + -