a主程序流程图参考模板Word文档格式.docx

上传人:b****4 文档编号:17815280 上传时间:2022-12-10 格式:DOCX 页数:19 大小:153.66KB
下载 相关 举报
a主程序流程图参考模板Word文档格式.docx_第1页
第1页 / 共19页
a主程序流程图参考模板Word文档格式.docx_第2页
第2页 / 共19页
a主程序流程图参考模板Word文档格式.docx_第3页
第3页 / 共19页
a主程序流程图参考模板Word文档格式.docx_第4页
第4页 / 共19页
a主程序流程图参考模板Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

a主程序流程图参考模板Word文档格式.docx

《a主程序流程图参考模板Word文档格式.docx》由会员分享,可在线阅读,更多相关《a主程序流程图参考模板Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

a主程序流程图参考模板Word文档格式.docx

3.4键盘处理程序

在本设计中采用软件消除抖动的方法来解决干扰的问题

根据按键的功能一般分为两种情况来处理:

(a)对于每按键一次视为一次输入的设定来说,在稳定闭合期内,不断检测按键是否已释放,当发现按键被释放后,读出对应按键的编码(或称为键号)

(b)对于重要输入功能的键设定来说,每隔一定时间,如500毫秒(即按下某键不动,一秒内重复输入该键两次)对按键进行检测,发现按键依然被按下时,就输入该键,直到按键被释放。

键盘中断程序:

INT1:

CLREX1

PUSHPSW

PUSHACC

MOVA,P1

ANLA,#0E7H

JNBPSW.0,EXIT

MOVR0,#0H

MOVR5,#1

LCALLDELAY

MOVA,P1

MOVR5,#50

JBP1.0,EX1

JBP1.1,EX2

JBP1.2,EX3

EX1:

INCR0

MOVA,R0

ADDA,18H

MOVB,#8

DIVAB

MOVR6,B

MOV18H,R6

LCALLDELAY

JNBP1.0,EXIT

JMPEX1

EX2:

CLRC

INCR0

MOVA,18H

SUBBA,R0

JNCEXIT

DIVAB

MOVR6,B

MOV18H,R6

LCALLDELAY

JNBP1.1,EXIT

JMPEX2

EX3:

JBP1.2,EX3

CPLP1.3

EXIT:

CLRIE1

MOVP1,#18H

POPACC

POPPSW

SETBEX1

RETI

 

图3-4键盘中断程序流程图PROCINT1

3.5双字节二进制整数转换为压缩BCD码整数子程序

NIBTD:

MOVA,R0

MOVR5,A

MOVR6,A

MOVA,R7

INCA

MOVA,R3

CLRA

NBD0:

MOV@R1,A

INCR1

DJNZR3,NBD0

MOVA,R7

MOVB,#08H

MULAB

MOVR3,A

NBD4:

MOVA,R5

MOVR0,A

MOVR2,A

CLRC

NBD1:

MOVA,@R0

RLCA图3.5二进制整数转换为压缩BCD码

MOV@R0,A整数子程序的程序流程图

DJNZR2,NBD1

MOVA,R6

MOVR1,A

INCR2

NBD3:

MOVA,@R1

ADDCA,@R1

DAA

DJNZR2,NBD3

DJNZR3,NBD4

RET

3.6三字节压缩BCD码转换成ASCII码子程序

MOVR2,#N;

字节数存R2

MOVR0,#50H;

ASCII码首地址

MOVR2,#60H;

BCD码首地址

BCDASC:

MOVA,@R1;

取BCD码

MOVR3,A;

BCD码暂存R3

ANLA,#0F0H;

屏蔽低四位保留高四位

SWAPA;

A中的高低四位交换

ADDA,#30H;

加30H得高位ASCII码

MOVA,R3;

保存ASCII码

INCR0

再取BCD码

ANLA,#0FH;

屏蔽高四位保留低四位

加30H得低位ASCII码

MOV@R0,A

INCR1

DJNZR2,BCDASC

3.7LCD显示程序

LCD:

RSEQUP2.0;

LCDRS引脚定义

ENEQUP2.1;

LCDEN引脚定义

BEGIN:

CLREN;

LCD被禁用

CALLSET_LCD;

LCD初始化并做显示测试

MOVA,18H;

设置所要显示的字符

MOVB,#11;

设置所要显示LCD的位置

CALLLCDP1;

在LCD第一行显

示字符

MOVR4,#6

MOVR1,#39H

MOVR2,#8图3-7LCD显示流程图

XU:

INCR1

MOVA,R1;

INCR2

MOVB,R2;

CALLLCDP2;

在LCD第二行显示字符

DJNZR4,XU

SET_LCD:

CLREN;

CALLINIT_LCD;

LCD初始化

MOVR5,#10;

延迟一下

CALLDELAY

MOVDPTR,#LMESS1;

指针指到显示消息1

MOVA,#1;

显示在第一行

CALLLCD_PRINT;

显示执行消息1于LCD第一行

MOVDPTR,#LMESS2;

指针指到显示消息2

MOVA,#2;

显示在第二行

显示执行消息2于LCD第二行

RET

INIT_LCD1:

4位I/O初始化LCD

MOVA,#28H

CALLWCOM;

双列显示,字型使用5*7点阵

MOVA,#0EH

光标出现不闪烁

MOVA,#06H

每次向右移一位,显示屏不移动

MOVA,#01H

清除LCD显示屏

RET

CLR_LINE1:

清除LCD第一行字符

MOVA,#80H;

设置第一行地址

CALLWCOM

MOVR0,#24;

设置计数值

CL:

MOV#‘’;

载入空格符至LCD

CALLWDATA;

输出字符至LCD

DJNAR0,CL;

计数结束

A=LINE1OR2;

在LCD的第一行或第二行印出字符

DPTR=MESSAGEPOINTER

LCD_PRINT:

CJNEA,#1,LINE2

LINE1:

MOVA,80H;

设置LCD的第一行地址

CALLCLR_LINE

MOVA,#80H

JMPFILL

LINE2:

MOVA,#0C0H;

设置LCD的第二行地址

MOVA,#0C0H

FILL:

MOVCA,@A+DPTR

CJNEA,#0,L1

L1:

CALLWDATA

INCDPTR

CLR_LINE:

清除LCD该行字符

MOVR0,#24;

C1:

MOVA,#‘’;

CALLWDATA;

DJNZR0,C1;

DE:

MOVR7,#5;

短暂延时

DJNZR7,$

EN1:

SETBEN;

短脉冲

CALLDE

CLREN

INIT_LCD:

LCD4位接口指令重置

MOVP0,#30H;

RS=0,R/W=0,D7~D4=0011

CALLEN1

MOVP0,#30H

MOVP0,#20H;

启动4位接口指令

CALLEN1;

RS=0,R/W=0,D7~D4=0010

CALLINIT_LCD1;

LCD指令设置初始化

WCOM:

WRITEHI4BIT

MOVP0,A;

先写入高4位命令

CLRRS;

RS=0写入命令

CALLEN1;

产生高电平启用脉冲

RLCA;

向左移4位

RLCA

WRITELO4BIT

写入低4位命令

WDATA:

SETBRS;

RS=1写入数据

向左移4位

SETBRS;

------------------------------------

DELAYR5*10ms;

延迟子程序

DELAY:

MOVR6,#25;

总延迟时间R5*10ms

D1:

MOVR7,#99

DJNZR6,D1

DJNZR5,DELAY

--------------------------------------

LMESS1:

DB“CHANNEL:

DB“VOLTAGE:

mv”

在LCD第一行特定位置显示字符

A=ASCDATA所要显示的字符

B=LINEXPOS所要显示的位置0~15

LCDP1:

将A寄存器放入堆栈

PUSHACC

MOVA,B

ADDA,#80H;

POPACC;

由堆栈取出A寄存器的值

写入所要显示的字符

------------------------------------------

在LCD第二行特定位置显示字符

LCDP2:

ADDA,#0C0H;

设置LCD的第二行地址;

END

3.8串行通信子程序

图3-8-1上位机人机交互界面

3.8.1上位机人机交互界面

图3-8-1为人机交互界面的外观图,用可视化编程语言VB编写的可视化界面,简洁明了,操作方便,串行通信采用了事件驱动行方式,使用Micorsoft公司的控件MicorsoftCommunication实现串行通信。

3.8.2上位机通信及显示程序

(1)初始化代码

PrivateSubForm_Load()

MSComm.CommPort=2‘设置串口2

MSComm.Settings="

2400,n,8,1"

‘波特率9600,无校验,8位数据,一位停止位

MSComm.InputLen=0‘读取接受缓冲区的所有字符

MSComm.InBufferSize=1024‘设置接受缓冲区为1024字节

MSComm.OutBufferSize=512‘设置发送缓冲区为512字节

MSComm.PortOpen=True‘打开串口

MSComm.SThreshold=0‘不触发发送事件

MSComm.RThreshold=1‘每一个字符到接收缓冲区都触

‘发接收事件

MSComm.InBufferCount=0‘清除发送缓冲区数据

MSComm.OutBufferCount=0‘清除接收缓冲区数据

Text_SEND.Text=“”‘清空发送文本框

Text_RECV.Text=“”‘清空接收文本框

EndSub

(2)发送数据

PrivateSubButton_SEND_Click()

DimxAsString

IfText_SEND.Text=“”Then‘发送数据不能为空

X=MsgBox(“发送数据不能为空”,16)

ExitSub

EndIf

IfNotMSComm.PortOpenThen‘保证串口打开

MSComm.PortOpen=True

MSComm.OutPut=Text_SEND.Tex+Chr$(13)‘发送数据

Fori=1To20000000‘延时

Next

(3)接收数据

PrivateSubMSComm_OnComm.()

SlectCaseMSComm.CommEvent‘.检验串口事件错误处理

CasecomEventOverrun‘数据丢失

Text_SEND.Text=“”‘清空发送缓冲区

Text_RECV.Text=“”‘清接收缓冲区

Text_SEND.SetFous=“”

ExitSub

CasecomEventRxOver‘接收缓冲区溢出

Text_RECV.Text=“”‘清空接收缓冲区

CasecomEventOver‘发送缓冲区已满

Text_SEND.Text=“”‘清空发送缓冲区

‘事件处理

CasecomEvReceive‘接收缓冲区内有数据

DimstrAsString

str=MSComm.InPut‘从接收队列中读入字符串

Text_RECV.Text=Text_RECV.Text+str‘读出字符串送显

EndSelect

(4)清空接收文本框

PrivateSubButton_RECV_C_Click()

Text_RECV.Text=“”‘清空接收文本框

Text_SEND_SetFocus

‘清空发送文本框

PrivateSubButton_SEND_C_Click()

Text_RECV.Text=“”‘清空发送文本框

3.8.3单片机终端串行通信程序

COMMUNICATION:

MOVR3,#7;

要发送的字节数

MOVR0,#40H;

待发送数据的起始地址

SENDBACK:

MOVA,@R0;

向PC机发送数据

MOVSBUF,A

WAIT:

JNBTI,WAIT

CLRTI

INCR0;

移动地址指针

DJNZR3,SENDBACK;

发送完否

3.9主程序

ORG0000H

SJMPMAIN

ORG0003H;

外部0中断入口地址

LJMPINTDATA

ORG0013H;

外部1中断入口地址

LJMPPROCINT1

ORG0023H;

串行中断入口地址

LJMPSERVE

ORG0100H;

主程序开始

MAIN:

MOVSP,#60H

MOVP1,18H;

键盘初始化

MOVTMOD,#20H;

定时器T1初始化

MOVTH1,#0F3H

MOVTL1,#0F3H

MOVSCON,#50H;

串行口初始化

MOVPCON,#80H;

SMOD=1

SETBTR1;

启动定时器T1

SETBEA;

开中断

SETBES;

允许串口中断

SETBEX1;

允许外部中断T1

NEXT:

LCALLSAMP;

调用数据采集程序,结果存于30H

MOVA,#30H

ADDA,18H

DECA

MOVB,#196

MULAB

MOV39H,A;

39H、3AH分别存储二进制数的地位和

MOV3AH,B;

高位

MOVR0,#39H

MOVR1,3BH

LCALLNIBTB;

双字节二进制整数转换为压缩BCD码

存于起始地址为3BH的单元

LCALLBCDA;

压缩BCD转换成ASCII码

MOVA,18H

ADDA,#30H

MOV40H,A

MOV46H,45H

MOV45H,#2EH

LCALLLCD;

调用显示子程序

LCALLCOMMUNICATION;

调用串行通信子程序

JMPNEXT

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1