串行传输控制八路数据采集器.docx

上传人:b****2 文档编号:17201021 上传时间:2023-07-22 格式:DOCX 页数:33 大小:156.44KB
下载 相关 举报
串行传输控制八路数据采集器.docx_第1页
第1页 / 共33页
串行传输控制八路数据采集器.docx_第2页
第2页 / 共33页
串行传输控制八路数据采集器.docx_第3页
第3页 / 共33页
串行传输控制八路数据采集器.docx_第4页
第4页 / 共33页
串行传输控制八路数据采集器.docx_第5页
第5页 / 共33页
串行传输控制八路数据采集器.docx_第6页
第6页 / 共33页
串行传输控制八路数据采集器.docx_第7页
第7页 / 共33页
串行传输控制八路数据采集器.docx_第8页
第8页 / 共33页
串行传输控制八路数据采集器.docx_第9页
第9页 / 共33页
串行传输控制八路数据采集器.docx_第10页
第10页 / 共33页
串行传输控制八路数据采集器.docx_第11页
第11页 / 共33页
串行传输控制八路数据采集器.docx_第12页
第12页 / 共33页
串行传输控制八路数据采集器.docx_第13页
第13页 / 共33页
串行传输控制八路数据采集器.docx_第14页
第14页 / 共33页
串行传输控制八路数据采集器.docx_第15页
第15页 / 共33页
串行传输控制八路数据采集器.docx_第16页
第16页 / 共33页
串行传输控制八路数据采集器.docx_第17页
第17页 / 共33页
串行传输控制八路数据采集器.docx_第18页
第18页 / 共33页
串行传输控制八路数据采集器.docx_第19页
第19页 / 共33页
串行传输控制八路数据采集器.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

串行传输控制八路数据采集器.docx

《串行传输控制八路数据采集器.docx》由会员分享,可在线阅读,更多相关《串行传输控制八路数据采集器.docx(33页珍藏版)》请在冰点文库上搜索。

串行传输控制八路数据采集器.docx

串行传输控制八路数据采集器

预留

 

采集端源程序

;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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2