串行传输控制八路数据采集器.docx
- 文档编号:17201021
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:33
- 大小:156.44KB
串行传输控制八路数据采集器.docx
《串行传输控制八路数据采集器.docx》由会员分享,可在线阅读,更多相关《串行传输控制八路数据采集器.docx(33页珍藏版)》请在冰点文库上搜索。
串行传输控制八路数据采集器
预留
采集端源程序
;r0通道数
adc0809_strbitp3.2
adc0809_a0bitp3.3
adc0809_a1bitp3.4
adc0809_a2bitp3.5
adc0809_eocbitp3.7
org0000h
jmpmain
org0023h;串口中断
jmpckou_int
main:
movsp,#60H;置堆栈
clradc0809_str
movscon,#50h;串口方式1,允许接收
movtmod,#20h;设置定时器1方式2,作波特率发生器9600b/s
movth1,#0fdh
movtl1,#0fdh;置初值
setbtr1;启动定时器
setbes;开串口中断
setbea;开总中断
jmp$
;串口中断程序,接收地址,发送数据
ckou_int:
movc,ti
jncshou_int;非发送中断,跳过
clrti
shou_int:
movc,ri
jncfanhui
clrri
mova,sbuf
deca;1~8对应为0~7
callstart_ad
movsbuf,a
fanhui:
reti
;ad装换子程序,入口:
a通道(0~7),出口:
a数据
start_ad:
rrca;输出地址
movadc0809_a0,c
rrca
movadc0809_a1,c
rrca
movadc0809_a2,c
setbadc0809_str
nop
clradc0809_str
read_data:
movc,adc0809_eoc;等待转换结束
jncread_data
movp1,#0ffh
mova,p1
ret
end
控制端源程序
;串口使用查询方式
;r0lcd页r1lcd列r2字模指针
;r4键值0~8
;r6放地址(1~8)r7放数据
;6eh做上次键值记录
;6fh做列计数
;电压值:
(70h).(71h)(72h)
;73h在更新数据显示时存临时页指针
lcd_ebitp3.7
lcd_rwbitp3.6
lcd_rsbitp3.5
lcd_cs2bitp3.4
lcd_cs1bitp3.3
org0000h
jmpmain
org0003h;外部中断0
jmpkey_board
main:
movsp,#2fh
movp2,#0f8h;键盘端xx111000
clrlcd_e
calllcd_bigin;lcd初始化
setbit0;下降沿触发
setbex0;开键盘中断
;设置串口通信
movscon,#50h;串口方式1,允许接收
movtmod,#20h;设置定时器1方式2,作波特率发生器9600b/s
movth1,#0fdh
movtl1,#0fdh;置初值
setbtr1;启动定时器
clres;不开串口中断
setbea;开总中断
;设置默认循环采集
movr4,#9
mov6eh,#9;上次键值
calllcd_clr
calllcd_mode
start:
mova,r4;键值
clrc
subba,6eh;判断键值是否有变动
jzequ_mode;无变动
mov6eh,r4;有变动
calllcd_clr
calllcd_mode
equ_mode:
mova,r4
subba,#09h
jzplayxunhuan;循环采集
;运行单路采集
playdanlu:
mova,r4
callchuankou
movr7,a;得到数据
calldecoder
calllcd_print
jmpstart
;运行循环采集
playxunhuan:
movr6,#1;通道1
mova,r6
callchuankou
movr7,a;得到数据
calldecoder
calllcd_print
movr6,#2;通道2
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#3;通道3
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#4;通道4
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#5;通道5
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#6;通道6
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#7;通道7
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
movr6,#8;通道8
mova,r6
callchuankou
movr7,a
calldecoder
calllcd_print
jmpstart
;键盘中断程序
key_board:
calldelay_4ms;确认键盘中断
movc,p3.2
jckey_board_over
mova,p2;读键码
rra
rra
rra
yihang:
rrca
jcerhang;非第一行键盘
h1_1:
mova,#0feh
movp2,a
movc,p2.3
jch1_2;非第一列
movr4,#1
jmpkey_board_over
h1_2:
mova,#0fdh
movp2,a
movc,p2.3
jch1_3;非第二列
movr4,#2
jmpkey_board_over
h1_3:
movr4,#3
jmpkey_board_over
erhang:
rrca
jcsanhang;非第二行键盘
h2_1:
mova,#0feh
movp2,a
movc,p2.4
jch2_2;非第一列
movr4,#4
jmpkey_board_over
h2_2:
mova,#0fdh
movp2,a
movc,p2.4
jch2_3;非第二列
movr4,#5
jmpkey_board_over
h2_3:
movr4,#6
jmpkey_board_over
sanhang:
;第三行键盘
h3_1:
mova,#0feh
movp2,a
movc,p2.5
jch3_2;非第一列
movr4,#7
jmpkey_board_over
h3_2:
mova,#0fdh
movp2,a
movc,p2.5
jch3_3;非第二列
movr4,#8
jmpkey_board_over
h3_3:
movr4,#9
key_board_over:
movp2,#0f8h
reti
;串口程序,发送a地址后,等待并接收发回数据到r7
chuankou:
clrri
clrti
movsbuf,a
wait:
movc,ri;等待接收数据
jncwait
mova,sbuf
movr7,a
ret
;更新通道数据显示
;入口r6地址,(70h).(71h)(72h)数据
lcd_print:
mova,6eh;判别采集模式
clrc
subba,#9
jzlcd_xh
movr0,#0
jmpshow_data1
lcd_xh:
mova,r6
deca
anla,#00000011b;确认页
rla
movr0,a
mova,r6;确认左右屏
deca
anla,#00000100b
jnzshow_data2
show_data1:
mov73h,r0
movr1,#24
mova,70h
movb,#16
mulab
movr2,a
mova,r0;调用"显示字符"函数后保持页不变
callchar1;显示整数位
movr0,73h
movr1,#40
mova,71h
movb,#16
mulab
movr2,a
callchar1;显示第一位小数
movr0,73h
movr1,#48
mova,72h
movb,#16
mulab
movr2,a
callchar1;显示第二位小数
ret
show_data2:
mov73h,r0
movr1,#24
mova,70h
movb,#16
mulab
movr2,a
callchar2;显示整数位
movr0,73h
movr1,#40
mova,71h
movb,#16
mulab
movr2,a
callchar2;显示第一位小数
movr0,73h
movr1,#48
mova,72h
movb,#16
mulab
movr2,a
callchar2;显示第二位小数
ret
;lcd初始化程序
lcd_bigin:
mova,#0c0h
calllcd_w_code1;设置显示初始行
calllcd_w_code2
mova,#3fh;开显示
calllcd_w_code1
calllcd_w_code2
ret
;将累加器a中的指令码写到lcd_1
lcd_w_code1:
clrlcd_rs
clrlcd_rw
movp1,a
setblcd_cs2
clrlcd_cs1
setblcd_e
clrlcd_e
ret
;将累加器a中的指令码写到lcd_2
lcd_w_code2:
clrlcd_rs
clrlcd_rw
movp1,a
setblcd_cs1
clrlcd_cs2
setblcd_e
clrlcd_e
ret
;写累加器a数据到lcd_2,入口a
lcd_w_data1:
setblcd_rs
clrlcd_rw
movp1,a
setblcd_cs2
clrlcd_cs1
setblcd_e
clrlcd_e
ret
;写累加器a数据到lcd_2,入口a
lcd_w_data2:
setblcd_rs
clrlcd_rw
movp1,a
setblcd_cs1
clrlcd_cs2
setblcd_e
clrlcd_e
ret
;数据页设置a页(0~7),入口a
lcd_page:
adda,#0b8h
calllcd_w_code1
calllcd_w_code2
ret
;数据列设置a列(0~63),入口a
lcd_line:
adda,#040h
calllcd_w_code1
calllcd_w_code2
ret
;lcd清屏
lcd_clr:
movr0,#0
movr1,#0
lcd_clr_loop1:
mova,r0
calllcd_page
movr1,#0
mova,r1
calllcd_line
lcd_clr_loop2:
mova,#0
calllcd_w_data1
calllcd_w_data2
incr1
cjner1,#64,lcd_clr_loop2
incr0
cjner0,#8,lcd_clr_loop1;一页完
ret
;lcd显示模板(单路或多路)
lcd_mode:
mova,r4;键值
clrc
subba,#09h
jzxunhuancaiji;循环采集
danlucaiji:
mova,r4
deca;a=(路数-1)*32汉字指针
movb,#32
mulab
movr0,#0
movr1,#0
movr2,a
callhanzi_1;显示"一"~"八"
movr0,#0
movr1,#16
movr2,#0c0h
callchar1;显示":
"
movr0,#0
movr1,#32
movr2,#0b0h
callchar1;显示"."
movr0,#0
movr1,#56
movr2,#0a0h
callchar1;显示"V"
jmpover_mode
xunhuancaiji:
movr0,#0
movr1,#0
movr2,#0
callhanzi_1;显示"一"
movr0,#0
movr1,#16
movr2,#0c0h
callchar1;显示":
"
movr0,#0
movr1,#32
movr2,#0b0h
callchar1;显示"."
movr0,#0
movr1,#56
movr2,#0a0h
callchar1;显示"V"
movr0,#2
movr1,#0
movr2,#20h
callhanzi_1;显示"二"
movr0,#2
movr1,#16
movr2,#0c0h
callchar1;显示":
"
movr0,#2
movr1,#32
movr2,#0b0h
callchar1;显示"."
movr0,#2
movr1,#56
movr2,#0a0h
callchar1;显示"V"
movr0,#4
movr1,#0
movr2,#40h
callhanzi_1;显示"三"
movr0,#4
movr1,#16
movr2,#0c0h
callchar1;显示":
"
movr0,#4
movr1,#32
movr2,#0b0h
callchar1;显示"."
movr0,#4
movr1,#56
movr2,#0a0h
callchar1;显示"V"
movr0,#6
movr1,#0
movr2,#60h
callhanzi_1;显示"四"
movr0,#6
movr1,#16
movr2,#0c0h
callchar1;显示":
"
movr0,#6
movr1,#32
movr2,#0b0h
callchar1;显示"."
movr0,#6
movr1,#56
movr2,#0a0h
callchar1;显示"V"
movr0,#0
movr1,#0
movr2,#080h
callhanzi_2;显示"五"
movr0,#0
movr1,#16
movr2,#0c0h
callchar2;显示":
"
movr0,#0
movr1,#32
movr2,#0b0h
callchar2;显示"."
movr0,#0
movr1,#56
movr2,#0a0h
callchar2;显示"V"
movr0,#2
movr1,#0
movr2,#0a0h
callhanzi_2;显示"六"
movr0,#2
movr1,#16
movr2,#0c0h
callchar2;显示":
"
movr0,#2
movr1,#32
movr2,#0b0h
callchar2;显示"."
movr0,#2
movr1,#56
movr2,#0a0h
callchar2;显示"V"
movr0,#4
movr1,#0
movr2,#0c0h
callhanzi_2;显示"七"
movr0,#4
movr1,#16
movr2,#0c0h
callchar2;显示":
"
movr0,#4
movr1,#32
movr2,#0b0h
callchar2;显示"."
movr0,#4
movr1,#56
movr2,#0a0h
callchar2;显示"V"
movr0,#6
movr1,#0
movr2,#0e0h
callhanzi_2;显示"八"
movr0,#6
movr1,#16
movr2,#0c0h
callchar2;显示":
"
movr0,#6
movr1,#32
movr2,#0b0h
callchar2;显示"."
movr0,#6
movr1,#56
movr2,#0a0h
callchar2;显示"V"
over_mode:
ret
;左屏显示一个汉字,起始点:
r0页r1列r2数
hanzi_1:
movdptr,#hanzi_tabal
mov6fh,#0
loop_hanzi_1:
mova,r0
calllcd_page;上页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data1
incr2
incr0
mova,r0
calllcd_page;下页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data1
incr1
decr0
incr2
inc6fh
mova,6fh
cjnea,#16,loop_hanzi_1;最多写16列
ret
;右屏显示一个汉字起始点:
r0页r1列r2数
hanzi_2:
movdptr,#hanzi_tabal
mov6fh,#0
loop_hanzi_2:
mova,r0
calllcd_page;上页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data2
incr2
incr0
mova,r0
calllcd_page;下页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data2
incr1
decr0
incr2
inc6fh
mova,6fh
cjnea,#16,loop_hanzi_2;最多写16列
ret
;左屏显示一个字符;起始点:
r0页r1列r2数
char1:
movdptr,#data_tabal
mov6fh,#0
loop_data_1:
mova,r0
calllcd_page;上页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data1
incr2
incr0
mova,r0
calllcd_page;下页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data1
incr1
decr0
incr2
inc6fh
mova,6fh
cjnea,#8,loop_data_1;最多写8列
ret
;右屏显示一个字符;起始点:
r0页r1列r2数不影响a
char2:
movdptr,#data_tabal
mov6fh,#0
loop_data_2:
mova,r0
calllcd_page;上页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data2
incr2
incr0
mova,r0
calllcd_page;下页
mova,r1
calllcd_line;列
mova,r2
movca,@a+dptr
calllcd_w_data2
incr1
decr0
incr2
inc6fh
mova,6fh
cjnea,#8,loop_data_2;最多写8列
ret
;数据译码,数据入口r7
;数据出口(电压显示格式:
x.xxV)=(70h).(71h)(72h)
decoder:
mova,r7
movb,#33h
divab;除以33h,得到整数部分
mov70h,a
mova,b
movb,#5
divab;再除以5,得到第一位小数
mov71h,a
clrc
subba,#10
jnzdot2
inc70h
mov7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串行 传输 控制 八路 数据 采集