最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

软件设计详细说明

来源:动视网 责编:小OO 时间:2025-09-24 20:56:16
文档

软件设计详细说明

[公司通用文档头]软件设计详细说明项目名TMPT日期2002/9/12版本号V0.1设计者AJIEhttp://www.21ic.comhttp://www.21icbbs.comAuthor:ajie[文档更新表更新日期更新原因]更新日期更新原因2002/9/10增加测量准确度更改温度查表算法2002/9/11目录软件各模块的功能实现主要是各执行模块的规划一实时时钟不考虑其他模块影响时的功能实现与其他模块的联系最小时间片段二AD转换三UARTRX功能四UARTTX功能五显示切换按键处理六LC
推荐度:
导读[公司通用文档头]软件设计详细说明项目名TMPT日期2002/9/12版本号V0.1设计者AJIEhttp://www.21ic.comhttp://www.21icbbs.comAuthor:ajie[文档更新表更新日期更新原因]更新日期更新原因2002/9/10增加测量准确度更改温度查表算法2002/9/11目录软件各模块的功能实现主要是各执行模块的规划一实时时钟不考虑其他模块影响时的功能实现与其他模块的联系最小时间片段二AD转换三UARTRX功能四UARTTX功能五显示切换按键处理六LC
[公司通用文档头]

软件设计详细说明

项目名TMPT

日期2002/9/12 版本号V0.1

设计者AJIE http://www.21ic.com http://www.21icbbs.com Author: ajie[文档更新表更新日期更新原因]

更新日期更新原因

2002/9/10 增加测量准确度更改温度查表算法2002/9/11目录

软件各模块的功能实现主要是各执行模块的规划

一实时时钟不考虑其他模块影响时的功能实现与其他模块的联系最小时间片段

二AD转换

三UART RX功能

四UART TX 功能

五显示切换按键处理

六LCD显示

七软件看门狗

[ 任何一个模块的设计都应该是先从不考虑其他模块的影响开始然后把其他模块的影响加进来遵从一种从简单到复杂的原则这里我只有第一个模块是完整的后面我都不写了因为是让大家看看所以举一反三吧]

程序空间规划

一ROM空间规划

二R AM空间规划变量的定义及各变量的作用解释

[ 其实是对你上面模块变量的一种总结但已经联系到了具体的编程]

程序状态转移图

[ 适合复杂的控制情况此处因为只有一种稳态单循环所以不画了你可以看看无绳电话或者是手机的软件设计中的程序状态转移图那个是复杂的画得很详细]

程序结构规划

[ 就是监控程序的规划主程序在什么状态时应该监控哪些功能应该处在哪种循环扫描状态下需要注意的只有一点执行程序段的时间不能超过最短扫描时间否则你在执行程序时有功能要求处理而你没扫描到直到下次功能要求处理这就使程序发生错误可以参考一下北航的单片机应用程序设计技术周航慈著那里对监控程序的写法说得好清楚的由于这里只有一种稳态一个主扫描循环功能比较单一这部分我就不列出来了]

程序流程图

[ 一般用VISIO画速度很快的这个肯定大家都会]

[ 这样做的好处让你看见一个复杂系统原来并不复杂理顺关系从简单到复杂一步一步来你很快就明白了这样在升级或者是修改时你可以马上找到相应的模块改之并知道哪些相关模块需要修改否则根本不用考虑]

由于后面部分都是大家看看就知道该怎么干的我就不多说了后面也没有相关的具体例子模块一实时时钟

采用TIMER1 来计时设定为每过025 S 中断一次

则一初始化

1初始化比较寄存器和控制寄存器

#0FFH CR10 比较寄存器

计数器TM1中的值等于比较比较寄存器中的值

时产生中断INTTM1

#0FH TCL1 Timer clock select register 1

TCL1.3 TCL1.2 TCL1.1 TCL1.0 TIMER1 CLOCK

0 1 1 0 fx / 2 pwr 2

0 1 1 1 fx / 2 pwr 3

1 0 0 0 fx /

2 pwr 4

1 0 0 1 fx /

2 pwr 5

1 0 1 0 fx /

2 pwr 6

1 0 1 1 fx /

2 pwr 7

1 1 0 0 fx /

2 pwr 8

1 1 0 1 fx /

2 pwr 9

1 1 1 0 fx /

2 pwr 10

1 1 1 1 fx /

2 pwr 12

TCL1.7 TCL1.6 TCL1.5 TCL1.4 TIMER2 CLOCK

NOT USED . DEFINED AS 0 0 0 0

#01H TMC1

0 0 0 0 0 TMC12 TCE2 TCE1

TMC12 0 8bit_timer register X 2 channels mode ( TM1 TM2 )

1 16bit_timer register X 1 channel mode ( TM )

TCE2 0 operation stop ( TM2 clear to 0 )

1 operation enable

TCE1 0 operation stop ( TM2 clear to 0 )

1 operation enable

2开放中断口

二INTTM1中断处理

进入中断即表示时间已过025 秒

1用 QTR_SECOND_CNT统计中断次数每中断一次QTR_SECOND_CNT

加 1 当 QTR_SECOND_CNT等于 4 时表示时间已过一秒则清

QTR_SECOND_CNT 并置位一秒标志 F_ONE_SECOND

RAM QTR_SECOND_CNT INIT #0

此变量用来统计0.25秒的中断次数如果已有4次则表示时间

已过一秒则清此变量

FLAG F_ONE_SECOND INIT #0

此标志用来标示时间是否已过一秒如果过一秒则置位此标志1秒的相关处理结束后清此标志

2判断发送数据计时器UART_TM_CNT是否等于0如果等于0则不作任何处理跳出中断如果不等于0则UART_TM_CNT减一

UART_TM_CNT用来统计发送一个MSG后的时间详细说明见发送模块里

面关于此变量的定义

三主循环

判断F_ONE_SECOND标志是否置位如果置位则表示一秒已过进入修改时

间模块UPDATE_TIME

1清一秒标志F_ONE_SECOND

2一秒计数器ONE_SECOND_CNT加1判断1秒计数器等于5否如果不等于5则该计数器加一并进入下一步如果等于5则表示5秒钟已过再

判断ADCR_CNT是否等于8如果不等于8表示一分钟内还没采样8次温

度值则ADCR_CNT加一并打开A/D中断再进入下一步如果等于8

则表示一分钟内已采样8次温度值则不作任何处理进入下一步3修改实时时钟UPDATE_CLOCK

1秒处理秒加1再判断秒是否大于59如果大于59则进入分处理并

清秒变量否则直接结束

RAM SECOND 0 ~ 59 INIT #0 1 bytes HEX

2分处理进入后分加一并置位发送时间标志F_SEND_TM_MSG和

置位计算温度累加值标志F_ADD_TMPT清温度转换次数变

量 ADCR_CNT如果分大于59则进入时处理并清分变量

否则结束修改

RAM MINUTE 0 ~ 59 INIT #0 1 bytes HEX 3时处理进入后时加1则判断时间是否已过23小时如果已过则

进入天处理并清时变量否则结束修改

RAM HOUR 0 ~ 23 INIT #0 1 bytes HEX

4天处理进入后天加1判断该月的最大天数用天变量与之进行比

较如果已过则天初始化为1并进入月处理否则结束修

RAM DATE 1 ~ 31 INIT #1 1 bytes HEX 5月处理进入后月加1判断月是否已大于12 如果大于则月置

值1并结束修改

RAM MONTH 1 ~ 12 INIT #1 1 bytes HEX

与其他模块的联系的详细说明

一A/D 转换模块在主循环中增加一个RAM ONE_SECOND_CNT 统计1秒的次数,每过5秒则判断此一分钟里面是否已经获得了8次ADCR值如果是

则不做任何相关处理否则继续开ADCR中断并累加ADCR的中断计数值

即ADCR_CNT加1

二何一个循环路径的执行时间不能超过1秒否则影响实时时钟三UART 通讯模块

1 TD338 UART 发送完一个MSG后等待DECT FP 回答如果3秒后还没有

收到回送信息则重发此MSG包重发三次还没有收到则放弃在UART

通讯中发完一个数据包后即置UART_TIME_CNT为120.25 s * 12 = 3 TIMER1每中断一次即对此RAM 进行操作如果UART_TIME_CNT 为0则不进行任何处理否则每次减1

TD338 UART在发送完一个MSG后即等待DECT FP 的ACK MSG如果

收到ACK MSG则清UART_TIME_CNT否则对UART_TIME_CNT进行判

断如果UART_TIME_CNT等于0则表示3秒已过无ACK MSG重发

上次所发数据

用此计时模块来统计3秒时间已过否存在一定的误差误差范围在0.25s 内

2时钟每过一分钟则置时间发送标志通过UART口给DECT FP 发送

SEND_TIME_MSG

模块二 AD转换

在AD转换中我们用ANI0来用做模拟信号输入口转换时间是 100/fx 用软件启动

初始化为 Stop conversion 则

一初始化

#20H ADM

CS TRG FR1 FR0 ADM3 ADM2 ADM1 HSC

CS A/D convertion operation control

0 operation stop

1 operation start

TRG External trigger selection

0 no external trigger ( software starts )

1 conversion starts by external trigger ( hardware starts )

FR1 FR0 HSC

0 0 1 160 / fx

0 1 1 80 / fx

1 0 0 100 / fx

1 0 1 200 / fx

ADM3 ADM2 ADM1 Analog Input Channel Selection

000 ~ 111 VS ANI0 ~ ANI7

#01H ADIS number of analog input input channel selection register

0 0 0 0 ADIS3 ADIS2 ADIS1 ADIS0

ADIS3 ADIS2 ADIS1 ADIS0

0 0 0 0 no analog input channel

0 0 0 1 1 channel ( ANI0 )

0 0 1 0 2 channel ( ANI0 , ANI1 )

0 0 1 1 3 channel ( ANI0 ~ ANI2 )

0 1 0 0 4 channel ( ANI0 ~ ANI3 )

0 1 0 1 5 channel ( ANI0 ~ ANI4 )

0 1 1 0 6 channel ( ANI0 ~ ANI5 )

0 1 1 1 7 channel ( ANI0 ~ ANI6 )

1 0 0 0 8 channel ( ANI0 ~ ANI7 )

二在改变实时时钟模块UPDATE_TIME下进行如下判断

时钟已过 5 秒否如果已过清1秒计时器并判断这一分钟内是否已进行了8次A/D转换如果是则不再进行A/D转换如果不是则打开AD转换即 #1 CS 时钟没过5秒则不作处理

RAM ONE_SECOND_CNT INIT #0 统计秒的次数RAM ADCR_CNT INIT #0 统计一分钟内A/D转换的次数

如果一分钟内转换了8次则不

再转换

ADCR_CNT在时钟过去一分钟后清0

三INTAD中断处理

进入中断则表示一次AD转换结束读出ADCR中的数据保存AD_CNV_RESULT中

置位新AD数据需要处理的标志F_NEW_ADCR关A / D中断.

RAM AD_CNV_RSLT INIT #0 1 byte

FLAG F_NEW_ADCR 是否有A / D 转换数据需要处理标志

1 有新的ADCR数据需要处理

0 无ADCR数据需要处理

四主循环LOOKUP_TMPT

查询 F_NEW_ADCR 置位否如果置位则有新的AD 数据待处理处理此数

1 AD 结果查表查得相应的温度值

先手工对电阻温度表进行计算处理得出电压和温度的对应关系再通过

电压和ADCR的关系算出ADCR值和温度的对应关系最后查表的是

ADCR值和温度的对应关系由于只有在-6 ~ 45 度范围内才有ADCR范围

值和温度的一一对应关系超出此范围则会出现不同温度ADCR值可能相

同的重合现象见103ET的温度电阻对应表为解决此一问题我们根据

温度缓慢变化原则只要阻值在该温度允许电阻变化范围内则认为温度不

变做成两张表在不同情况下查不同的表可得出相对准确的温度值

1果此次的ADCR值大于上次测量的ADCR值则说明温度可能在上升查表一具体取值方式可参考我们做的ADCR温度对应表

查的方向40 ~ 70 度

为了缩短查询时间我们采用上次的ADCR值和TMPT值作为参考进

行查询根据TMPT值移动HL指针指到上次的TMPT对应的ROM地

址以HL为基础对

先根据上次的温度值计算出上次的查询位置值从上次的位置值开始

递加查询本次的温度值

2果此次的ADCR值小于上次测量的ADCR值则说明温度可能在下降

查表二

查的方向 70 ~ 40 度

查出温度值后AD_CNV_RSLT AD_LAST_CNV

并用本次温度值更新上次温度值 TMPT_NOW TMPT_LAST

RAM AD_LAST_RSLT INIT #0 1byte ADCR值

RAM AD_TMPT_RSLT INIT #0 1byte ADCR值

RAM TMPT_NOW 此数据最高位为符号位后面为温度值HEX

RAM TMPT_LAST 此数据最高位为符号位后面为温度值HEX Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Bit7 是符号为Bit7 = 1 表示此温度数据为负

Bit7 = 0 表示此温度数据为正Bit6 ~ Bit 0为温度数据

对温度度采样次数进行计数并把各温度值分别存入一温度记录表中采用

循环保存保存到第四十个RECORD空间时自动转到第一个保存

RAM TMPT_RECORD_CNT 1 bytes 温度数据存储指针

RAM TMPT_RECORD 40 bytes 温度数据记录表首地址

五主循环ADD_TMPT

1分钟过否如果已过则计算所有测得温度的累加值计算后置位温度平均标志

F_A VERAGE_TMPT

RAM TMPTH HEX

RAM TMPTL HEX

FLAG F_TMPT_SIGN 用来表示累加值的符号

1为负0 为正

FLAG F_A VERAGE_TMPT 标示是否计算温度平均值

1表示累加值计算结束可以计算平均值了

0表示不能计算平均值

六主循环A VERAGE_TMPT

如果温度平均标志置位则计算温度平均值并把数据从HEX格式转化成标准温度的BCD格式比较这次的平均温度值和上次保存的平均温度值如果不等则置显示刷新标志发送温度标志并把本次的温度值移入显示温度的存储空间把此次的温度平均值移入上次温度平均值存储空间

RAM LAST_TMPTH

RAM LAST_TMPTL

FLAG F_UPDATE_DISP 刷新显示时置位

FLAG F_SEND_TMPT_MSG 发送温度时置位模块三 UART 模块初始化和RX功能

我们采用NEC 780062芯片的Serial interface channel 2 作为 UART 通讯

串行通讯接口2被设置成可收发的8位无奇偶校研一位停止位9600

The serial channel 2 is set to 2_way UART mode of 8_bit , no parity ,1 stop bit and 9600 baud from the internal baud rate generator .

一初始化

# 00H CSIM2

This register is set when serial interface is used in the 3_wire seriial I/O mode.When UART mode is selected , CSIM2 should be set to 00H.

# 0CBH ASIM Asynchronous serial interface mode register (ASIM )

TXE RXE PS1 PS0 CL SL ISRM SCK

TXE Control Operation Control

0 Transmit operation stopped

1 Transmit operation enabled

RXE Receive Operation Control

0 Receive operation stopped

1 Receive operation enabled

PS1 PS0 Parity Bit Specification

0 0 No parity

0 1 0 parity always added in transmission

No parity test in reception (parity error not generated )

1 0 Odd parity

2 1 Even parity

CL Character Length Specification

0 7bits

1 8bits

SL Transmit Data Stop Bit Length Specification

0 1_bit

1 2_bit

ISRM Control of Reception Completion Interrupt in Case of Error

Generation

0 Reception completion interrupt generated in case of error

generation

1 Reception completion interrupt not generated in case of error

generation

SCK Clock Selection in Asynchronous Serial Interface Mode

0 Input clock from off_chip to ASCK pin

1 Dedicated baud rate generator output

# 7BH BRGC Baud rate generator control register (BRGC )

TPS3 TPS2 TPS1 TPS0 MDL3 MDL2 MDL1 MDL0 TPL3 ~ TPL0 = 0 0 0 0 ~ 1 1 1 0 VS k = 0 ~ 14

TPS3 ~ TPS0 = 0 0 0 0 VS n = 11

TPS3 ~ TPS0 = 0 1 0 1 ~ 1 1 1 0 VS n = 1 ~ 10[ Baud rate ] = fxx / [ ( 2 pwr n ) X ( k + 16 ) ]

fxx :

MCS = 1 fxx = fx

MCS = 0 fxx = fx/2

二 INTSR 中断

进入此中断表示已有数据收到读出该数据到RAM RX_DATA

读ASIS判定该数据是否出错如果出错不予处理否则置接受到数据标志

F_RX_DATA

RAM RX_DATA 1byte INIT #0

FLAG F_RX_DATA INIT #0 接收到正确的数据时置位

三主循环FRAME_CHECK

对接收到的数据进行判断整个数据包接收完否如果接收完则置新数据包收到的标志如果未接收完则继续接收详细的过程请参考流程图

FLAG F_NEW_MSG INIT #0

1 收到新数据包0 未收到新数据包

RAM RX_BUFF 接受数据包首址划分空间16 bytes

三主循环 DECODE_MSG

收到新数据包否如果收到则对该数据包进行解码否则不做任何处理

1收到DECT FP 发过来的应答包

1收到ACK_OK包则数据发送成功此时清MSG正在发送标志

F_UART_KEEP清发送超时计时器UART_TM_CNT清发送次数存储器

TX_MSG_CNT

2收到ERROR BUSY Undefined No Response Bad PP number数据包则此次发送不成功清重发标志马上进行重发操作

2收到DECT FP 发过来的命令包

1要求发送三个通道和室内温度的数据包 GET_THG_MSG

Length = 02

Command = 0x57

Sub command = 0xF0

Data = none

TD338收到此数据包后回送PROVIDE_THG_MSG实际上在此模块部分只要置位F_SEND_THG_MSG即可

Length = 15

Command = 0x57

Subcommand = 0xF0

Data = temperature (2 bytes ) and humidity (1 bytes ) in channel 1 temperature (2 bytes ) and humidity (1 bytes ) in channel 2

temperature (2 bytes ) and humidity (1 bytes ) in channel 3

temperature (2 bytes ) and humidity (1 bytes ) indoor

weather (1 bytes )

此处当我们回送数据包时我们用通道1来回送温度其他的通道全部采用默认值各值如下

Data = Channel1 temperature 实际测量发送 humidity 0x50

Channel2 temperature #0x00 humity 0x00

Channel3 temperature #0x00 humity 0x00

Weather 0x06

TD338发完此数据包后即等待DECT FP 回送ACK数据包如果DECT FP 回送了ACK_OK数据包则表示整个发送完成具体操作见上面收到ACK 包的处理

2收到要求发送时间的数据包GET_TIME_MSG

Length = 0x02

Command = 0x54

Subcommand = 0xE0

Data = none

TD338收到此数据包后回送TIME_MSG实际上在此模块中只要置位标志F_SEND_TM_MSG即可注意这里发送的时间是压缩码时间从时

间变量空间取出的时间必须经过HEX BCD变换才能发送区别从DECT FP 发过来的时间

Length = 0x07

Command = 0x54

Sub command = 0xE3

Data = Second ( 1byte )压缩码

Minute (1byte )压缩码

Hour (1byte )压缩码

Date (1byte )压缩码

Month (1byte )压缩码

TD 338 发送完此数据包后即等待DECT FP 回送ACK 数据包见上面的处理

3收到时间数据包 TIME_MSG 这里面的时间数据为HEX码可直接移入

时间变量空间

Length = 0x07

Command = 0x54

Sub command = 0xE3

Data = Second ( 1byte )

Minute (1byte )

Hour (1byte )

Date (1byte )

Month (1byte )

NOTE 此处收到数据包后不回送ACK包协议不具有统一和完整性好需要修改

模块四 UART TX 模块

一INT_TX 中断

进入此中断表示一个字节的数据发送完毕判断一个数据包发送完毕否如果已发送完则不做任何处理跳出中断如果没有发送完则从TX_BUFF中读出下一个数据继续进行发送直到所有的数据全部发送完即发送COUNT为0时表示一个MSG已经全部发送完毕

RAM TX_BUFF 发送数据首址

RAM COUNT 发送数据长度

二主循环

判断有数据包正在发送否如果有数据包正在发送_TX_KEEP = 1 则不作任何处理如果没有数据包在发送则判断是否有数据包需要发送如果有数据包需要发送则置位数据包正在发送标志 F_TX_KEEP 并进入数据包发送模块否则不作任何处理

数据发送子模块

1如果F_SEND_THG_MSG为真则表示有数据包需要发送发送

PROVIDE_THG_MSG

2如果F_SEND_TM_MSG为真则表示有数据包需要发送发送TIME_MSG

如果这些发送数据标志全部为0则不作任何处理

三主循环重送处理

判断有数据正在发送否是判断发送计时器UART_TM_CNT等于0否如果不等于0则不做任何处理如果等于0再判断TX_MSG_CNT(重送次数)等于0否如果等于0则清正在发送数据包标志F_TX_KEEP后进入下一步操作否则TX_BUFF 里面的数据重发#12 UART_TX_TIME并且TX_MSG_CNT减1发送首址重回TX_BUFF并把发送长度再次送入TX_LENGTH COUNT模块五显示切换按键处理

一初始化

端口为输入口带上拉电阻未按下状态为1

二全部在定时器二的中断中实现

查询端口端口为低时表示可能有键按下判断键按下标志F_KEY_PRS是否置位如果置位表示上次按下的键还未释放不作任何处理如果键按下标志复位则表示刚检测到端口可能有键按下则延时1ms继续判断直到18ms后端口还为低则表示有键按下置位键按下标志切换LCD显示模并置位刷新显示标志F_UPDATE_LCD 如果查询端口为高则表示键已释放则复位键按下标志F_KEY_PRS

#1 F_UPDATE_DISP

FLAG F_DISP_UNIT INIT #0 复位表示是显示摄氏度

置位表示是显示华氏度

FLAG F_KEY_PRS INIT #0模块六 LCD显示

一初始化

LCD 时钟512Hz ,1/3 biasing and 1/3 duty cycle #1 TMC2.1

LCDM LCD display mode register INIT #31H LCDM

LCDON LCDM6 LCDM5 LCDM4 0 LCDM2 LCDM1 LCDM0 LCDM2 LCDM1 LCDM0 Bias method

0 0 0 1 / 3

0 0 1 1 / 3

0 1 0 1 / 2

0 1 1 1 / 2

1 0 0 static

Other setting prohibitted

LCDM6 LCDM5 LCDM4 LCD clock seletion

0 0 0 fw / 2 pwr 9

0 0 1 fw / 2 pwr 8

0 1 0 fw / 2 pwr 7

0 1 1 fw / 2 pwr 6

fw = fxx / 2 pwr 7

DISPON LCD display

on

0 display

off

1 display

LCDC LCD display control register INIT #01H LCDC

LCDC7 LCDC6 LCDC5 LCDC4 0 0 LEPS LIPS

LEPS LIPS LCD driving power supply seletion

0 0 Doesn’t supply power to LCD

0 1 Supply power to LCD from VDD pin

1 0 Supply power to LCD from BIAS pin

(short BIAS and VLCD pins internally)

1 1 Setting prohibitted

LCD7 ~ LCD4 Setting pins S24 ~ S39 port pins or segment pins NOT USED HERE.

显示为摄氏度先执行一次温度测量后再显示实际温度

二主循环

显示刷新标志置位否置位则进行显示刷新先判定显示模式如果是摄氏度显示模式则把数据直接从温度显示RAM中移入显示缓冲区如果是华氏度显示模式则先把摄氏度转换成华氏度再移入显示缓冲区把显示缓冲区中的数据依次读出进行显示LCD 8段码的显示采用查数字码表算法把各数字位一位一位查表计算显示刷新结束后显示刷新标志复位如果显示刷新标志复位则无处理继续主循环

鉴于LCD格式尚未最后确定此处暂不详细化

RAM DIGIT1 待显示数字

RAM DIGIT2 待显示数字

RAM DIGIT3 待显示数字

RAM DIGIT4 待显示数字RAM LCD_TMPTL 待显示温度值低位

RAM LCD_TMPTH 待显示温度值高位

待显示温度数据存放格式请参考相关的通讯协议文档温度格式

FLAG F_UNIT_HUA 温度单位标志

1 显示华氏度0 显示摄氏度

FLAG F_DP_ON 小数点标志

1 点亮0 熄灭

FLAG F_SHE_SIGN 摄氏度的符号

1 摄氏度为负0 摄氏度为正

FLAG F_HUA_SIGN 华氏度符号

1 华氏度为负0 华氏度为正

1根据温度单位标志显示温度单位

F_UNIT_HUA 1 显示华氏度单位0 显示摄氏度单位

2根据温度单位标志进行下面的处理

如果是显示摄氏度则不做任何处理进入下一步

如果是显示华氏度则先把摄氏度变为华氏度再进行显示变换如下

1计算公式华氏度 = 摄氏度X 9 / 5 + 32

2用符号F_SHE_SIGN记录摄氏度的符号1为负0为正

3把LCD_TMPT2LCD_TMPT1转化成十六进制数再进行四则计算结果保留在LCD_TMPT2,LCD_TMPT1中再对LCD_TMPT2,LCD_TMPT1进

行处理见下面3

3显示摄氏度温度范围为 40 ~ 70

1如果温度为正0 ~ 70

熄灭DIGIT1

LCD_TMPTH低四位数放在DIGIT2显示

LCD_TMPTL高四位放在DIGIT3显示

LCD_TMPTL低四位放在DIGIT4显示

置小数点标志

2如果温度为负 40~ 0

熄灭DIGIT1

号放在DIGIT2显示

A如果LCD_TMPTH低四位不等于040 ~ 10

LCD_TMPTH低四位放在DIGIT3显示

LCD_TMPTL高四位放在DIGIT4显示

复位小数点标志

B BYTE2的低四位等于0 10 ~ 0

LCD_TMPTL的高四位放在DIGIT3显示

LCD_TMPTL的低四位放在DIGIT4显示

置小数点标志

4显示华氏度温度范围为40 ℉ ~ 158 ℉

1如果温度为正0 ℉ ~ 158 ℉

LCD_TMPTH高四位放在DIGIT1显示

LCD_TMPTH低四位放在DIGIT2显示LCD_TMPTL高四位放在DIGIT3显示

LCD_TMPTL低四位放在DIGIT4显示

置小数点标志

2如果温度为负 40℉~ 0 ℉

熄灭DIGIT1

号放在DIGIT2显示

A如果LCD_TMPTH低四位不等于040℉ ~ 10℉

LCD_TMPTH低四位放在DIGIT3显示

LCD_TMPTL高四位放在DIGIT4显示

复位小数点标志

B LCD_TMPTL的低四位等于0 10℉ ~ 0℉

LCD_TMPTL的高四位放在DIGIT3显示

LCD_TMPTL的低四位放在DIGIT4显示

置小数点标志

5数据显示

1 DIGIT1

为0则不显示任何数字不为0则显示1

2 DIGIT2

DIGIT2 = 0 是DIGIT1 = 0也是则DIGIT2不能显示故#0BH –DIGIT2 DIGIT2等于0 ~ 9时直接查表DGT_TABLE显示0 ~ 9

DIGIT2如果等于0AH则显示

DIGIT2如果等于0BH则无任何显示

3 DIGIT3

直接查表DGT_TABLE显示0 ~ 9

4 DIGIT4

直接查表DGT_TABLE显示0 ~ 9

6小数点处理

根据小数点的标志点亮或者熄灭小数点

1点亮0熄灭

为什么小数点放在最后处理是因为小数点和数字3的第一个DISP RAM 地址相同为方便所以放在最后可参考相关的显示和DISP RAM 对应表

LCD查表数据 DIGIT显示数字和RAM地址输入值的关系具体

DB 06H,05H,06H ;display '0' DIGIT = 0

DB 06H,00H,00H ;display '1' DIGIT = 1

DB 04H,07H,02H ;display '2' DIGIT = 2

DB 06H,07H,00H ;display '3' DIGIT = 3

DB 06H,02H,04H ;display '4' DIGIT = 4

DB 02H,07H,04H ;display '5' DIGIT = 5

DB 02H,07H,06H ;display '6' DIGIT = 6

DB 06H,04H,00H ;display '7' DIGIT = 7

DB 06H,07H,06H ;display '8' DIGIT = 8DB 06H,07H,04H ;display '9' DIGIT = 9 DB 00H,02H,00H ;display '-' DIGIT = 0AH DB 00H,00H,00H ;no display DIGIT = 0BH

程序空间规划

-> 整个系统中的RAM资源情况

FA58H - FA7FH : LCD RAM

FD00H - FE1FH :

Direct addressing

Register indirect addressing

Basing addressing

Bassed indexed addressing

FE20H - FEDFH : Short Direct Addressing

FEE0H - FEFFH : Register addressing

Short Direct Addressing

FF00H - FF1FH : Short Direct Addressing

SFR Addressing

FF1FH - FFFFH : SFR Addressing

-> 本系统中可规划RAM资源

--------FD00H - FE1FH : 可用作SP空间和RAM表在此用做SP空间--------FE20H - FEDFH : 一般的RAM变量保存空间

->本系统中的ROM资源情况

0000H - 003FH : 中断向量地址空间不可用作通用编程空间

0040H - 007FH : CALLT Table Area 不可用作通用编程空间

0080H - 07FFH : Program Area 通用编程空间

0800H - 0FFFH : CALLF Entry Area 不可用作通用编程空间

1000H - 3FFFH : Program Area 通用编程空间

->本系统中可规划的ROM资源情况

0080H - 07FFH : 系统初始化及主循环代码空间

1000H - 3FFFH : 系统中断子程序及各执行模块代码空间

变量定义及意义说明

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

MORAM DSEG AT 0FE20H

;---------------TIMER

QTR_SECOND_CNT DS 1 ;FE20H 0.25 S counter

ONE_SECOND_CNT DS 1

UART_TM_CNT DS 1 ;FE22H

SECOND DS 1

MINUTE DS 1 ;FE24HHOUR DS 1

DATE DS 1 ;FE26H

MONTH DS 1

;---------------UART RX

RX_DATA DS 1 ;FE28H

RX_CNT DS 1

RX_BUFF DS 7 ;FE2AH ~ FE30H FRAME_STATUS DS 1

LENGTH DS 1 ;FE32H

;---------------UART TX

COUNT DS 1

TX_BUFF DS 19 ;FE34H

TX_DATA DS 1

TX_LENGTH DS 1 ;FE36H

;---------------LCD DISPLAY

DIGIT1 DS 1 ;FE38H

DIGIT2 DS 1

DIGIT3 DS 1 ;FE3AH

DIGIT4 DS 1

LCD_TMPTH DS 1 ;FE3CH

LCD_TMPTL DS 1

;---------------A/D CONVERSION

ADCR_CNT DS 1 ;FE3EH

AD_CNV_RSLT DS 1

AD_LAST_RSLT DS 1 ;FE40H

AD_TMPT_CNT DS 1

TMPTL_LAST DS 1 ;FE42H TMPTH_NOW DS 1

TMPT_RECORD_CNT DS 1 ;FE44H

TMPTH DS 1 ;FE46H

TMPTL DS 1

TMPT_RECORD DS 40 ;FE48H ~ FE87H ;---------------

;FLAG definication ;0FE88H

;---------------------------------------------------

definication MFLAG

BSEG ;bitF_ONE_SECOND DBIT ;0FE88.0

F_SEND_TM_MSG DBIT ;1

F_SEND_THG_MSG DBIT ;2

F_ADD_TMPT DBIT ;3

F_A VERAGE_TMPT DBIT ;4

F_NEW_ADCR DBIT ;5

F_UPDATE_DISP DBIT ;6

F_UNIT_HUA DBIT ;7

F_DP_ON DBIT ;0FE.0 F_SHE_SIGN DBIT ;1

F_HUA_SIGN DBIT ;2

F_EIGHT_TMPT DBIT ;3

F_RX_DATA DBIT ;4

F_TMPT_SIGN DBIT ;5

;---------------------------------------------------

文档

软件设计详细说明

[公司通用文档头]软件设计详细说明项目名TMPT日期2002/9/12版本号V0.1设计者AJIEhttp://www.21ic.comhttp://www.21icbbs.comAuthor:ajie[文档更新表更新日期更新原因]更新日期更新原因2002/9/10增加测量准确度更改温度查表算法2002/9/11目录软件各模块的功能实现主要是各执行模块的规划一实时时钟不考虑其他模块影响时的功能实现与其他模块的联系最小时间片段二AD转换三UARTRX功能四UARTTX功能五显示切换按键处理六LC
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top