⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 model.lst

📁 液晶模块LCD1602配合键盘显示的一个实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0033) *       v0.40  增加了串口发送进程。增加了原子操作。        *
(0034) *       v1.00  针对新规范进行了修改,增加自动收发进程。    *
(0035) * -------------------------------------------------------- *
(0036) *  [使用说明]                                              *
(0037) *           1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
(0038) *              小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
(0039) *              的大小。                                    *
(0040) *           2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
(0041) *              收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
(0042) *              一个发送缓冲区。                            *
(0043) *           3、在取数的时候,有时候要考虑屏蔽中断,否则会  *
(0044) *              出现不可预知的后果。                        *
(0045) *           4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
(0046) *              使用发送缓冲时,使用自动发送进程。并需要定  *
(0047) *              义宏UDR_PORT来指定发送端口、也需要将宏      *
(0048) *              SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
(0049) *              成中断处理程序中。                          *
(0050) *           5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
(0051) *              代码。例如485总线的发送使能等。             *
(0052) *           6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使  *
(0053) *              能关闭代码。例如485总线发送使能的关闭。     *
(0054) ***********************************************************/
(0055) 
(0056) /********************
(0057) * 头 文 件 配 置 区 *
(0058) ********************/
(0059) # include "LIB_Config.h"
(0060) # include "RD_MacroAndConst.h"
(0061) # include "RD_UseSerialBuff.h"
(0062) 
(0063) /********************
(0064) *   系 统 宏 定 义  *
(0065) ********************/
(0066) 
(0067) /*------------------*
(0068) *   常 数 宏 定 义  *
(0069) *------------------*/
(0070) #ifndef SERIAL_RX_BUFF_SIZE
(0071)     # define SERIAL_RX_BUFF_SIZE 32
(0072) #endif
(0073) #ifndef SERIAL_TX_BUFF_SIZE
(0074)     # define SERIAL_TX_BUFF_SIZE 32
(0075) #endif
(0076) #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0077)     #ifndef UDR_PORT
(0078)         # error Need for UDR_PORT!
(0079)     #endif
(0080) 
(0081)     #ifndef SERIAL_ENABLE_WRITE
(0082)         # define SERIAL_ENABLE_WRITE
(0083)     #endif
(0084) 
(0085)     #ifndef SERIAL_DISABLE_WRITE
(0086)         # define SERIAL_DISABLE_WRITE
(0087)     #endif
(0088) #endif
(0089) /********************
(0090) *   函 数 声 明 区  *
(0091) ********************/
(0092) #ifdef _USE_SERIAL_RX_BUFF
(0093) BOOL UARTaddDataToRxBuff(uint8 Data);
(0094) BOOL UARTgetDataFromRxBuff(uint8 *Data);
(0095) #endif
(0096) 
(0097) #ifdef _USE_SERIAL_TX_BUFF
(0098) BOOL UARTaddDataToTxBuff(uint8 Data);
(0099) BOOL UARTgetDataFromTxBuff(uint8 *Data);
(0100)     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0101) BOOL PROC_Serial_Transmitter(void);
(0102)     #endif
(0103) #endif
(0104) 
(0105) /********************
(0106) *   模块变量定义区  *
(0107) ********************/
(0108) #ifdef _USE_SERIAL_RX_BUFF
(0109) static uint8  UARTRxBuff[SERIAL_RX_BUFF_SIZE];
(0110) static unsigned int  UARTRxBuffHead = 0;
(0111) static unsigned int  UARTRxBuffTail = 0;
(0112) static unsigned int  UARTRxBuffCounter = 0;
(0113) #endif
(0114) 
(0115) #ifdef _USE_SERIAL_TX_BUFF
(0116) static uint8  UARTTxBuff[SERIAL_TX_BUFF_SIZE];
(0117) static unsigned int  UARTTxBuffHead = 0;
(0118) static unsigned int  UARTTxBuffTail = 0;
(0119) static unsigned int  UARTTxBuffCounter = 0;
(0120) #endif
(0121)  
(0122) /********************
(0123) *   全局变量定义区  *
(0124) ********************/
(0125) #ifdef _USE_SERIAL_TX_BUFF
(0126)     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0127) BOOL g_bIfSerialTransmitCompleted = TRUE;
(0128)     #endif
(0129) #endif
(0130) 
(0131) /***********************************************************
(0132) *   函数说明:接收缓冲区取值函数                           *
(0133) *   输入:    存储取出数据地址的指针                       *
(0134) *   输出:    取值是否成功                                 *
(0135) *   调用函数:无                                           *
(0136) ***********************************************************/
(0137) #ifdef _USE_SERIAL_RX_BUFF
(0138) BOOL UARTgetDataFromRxBuff(uint8  *Data)
(0139) {
(0140)     SAFE_CODE_PERFORMANCE
_UARTgetDataFromRxBuff:
  Data                 --> R16
      98 94F8      BCLR	7
      99 9020 0104 LDS	R2,RD_UseSerialBuff.c:UARTRxBuffTail
      9B 9030 0105 LDS	R3,RD_UseSerialBuff.c:UARTRxBuffTail+1
      9D 9040 0102 LDS	R4,RD_UseSerialBuff.c:UARTRxBuffHead
      9F 9050 0103 LDS	R5,RD_UseSerialBuff.c:UARTRxBuffHead+1
      A1 1442      CP	R4,R2
      A2 0453      CPC	R5,R3
      A3 F459      BNE	0x00AF
      A4 9020 0106 LDS	R2,UARTRxBuffCounter
      A6 9030 0107 LDS	R3,UARTRxBuffCounter+1
      A8 2022      TST	R2
      A9 F429      BNE	0x00AF
      AA 2033      TST	R3
      AB F419      BNE	0x00AF
      AC 9478      BSET	7
      AD 2700      CLR	R16
      AE C02B      RJMP	0x00DA
      AF 9020 0102 LDS	R2,RD_UseSerialBuff.c:UARTRxBuffHead
      B1 9030 0103 LDS	R3,RD_UseSerialBuff.c:UARTRxBuffHead+1
      B3 01C1      MOVW	R24,R2
      B4 9601      ADIW	R24,1
      B5 9390 0103 STS	RD_UseSerialBuff.c:UARTRxBuffHead+1,R25
      B7 9380 0102 STS	RD_UseSerialBuff.c:UARTRxBuffHead,R24
      B9 E989      LDI	R24,0x99
      BA E091      LDI	R25,1
      BB 01F1      MOVW	R30,R2
      BC 0FE8      ADD	R30,R24
      BD 1FF9      ADC	R31,R25
      BE 8020      LDD	R2,Z+0
      BF 01F8      MOVW	R30,R16
      C0 8220      STD	Z+0,R2
      C1 9180 0106 LDS	R24,UARTRxBuffCounter
      C3 9190 0107 LDS	R25,UARTRxBuffCounter+1
      C5 9701      SBIW	R24,1
      C6 9390 0107 STS	UARTRxBuffCounter+1,R25
      C8 9380 0106 STS	UARTRxBuffCounter,R24
      CA 9180 0102 LDS	R24,RD_UseSerialBuff.c:UARTRxBuffHead
      CC 9190 0103 LDS	R25,RD_UseSerialBuff.c:UARTRxBuffHead+1
      CE 3880      CPI	R24,0x80
      CF E0E0      LDI	R30,0
      D0 079E      CPC	R25,R30
      D1 F431      BNE	0x00D8
      D2 2422      CLR	R2
      D3 2433      CLR	R3
      D4 9230 0103 STS	RD_UseSerialBuff.c:UARTRxBuffHead+1,R3
      D6 9220 0102 STS	RD_UseSerialBuff.c:UARTRxBuffHead,R2
      D8 9478      BSET	7
(0141)     (
(0142)         if ((UARTRxBuffHead == UARTRxBuffTail) 
(0143)          && (UARTRxBuffCounter == 0))
(0144)         {
(0145)             SEI();
(0146)             return FALSE;
(0147)         }
(0148)         (*Data) = UARTRxBuff[UARTRxBuffHead++];
(0149)     
(0150)         UARTRxBuffCounter--;
(0151)     
(0152)         if (UARTRxBuffHead == SERIAL_RX_BUFF_SIZE)
(0153)         {
(0154)             UARTRxBuffHead = 0;
(0155)         }
(0156)     )		
(0157)     return TRUE;
      D9 E001      LDI	R16,1
      DA 9508      RET
(0158) }
(0159) 
(0160) /***********************************************************
(0161) *   函数说明:接收缓冲区首数据察看函数                     *
(0162) *   输入:    存储取出数据地址的指针                       *
(0163) *   输出:    取值是否成功                                 *
(0164) *   调用函数:无                                           *
(0165) ***********************************************************/
(0166) BOOL UARTPeekDataFromRxBuff(uint8 *pData)
(0167) {
(0168)     SAFE_CODE_PERFORMANCE
_UARTPeekDataFromRxBuff:
  pData                --> R16
      DB 94F8      BCLR	7
      DC 9020 0104 LDS	R2,RD_UseSerialBuff.c:UARTRxBuffTail
      DE 9030 0105 LDS	R3,RD_UseSerialBuff.c:UARTRxBuffTail+1
      E0 9040 0102 LDS	R4,RD_UseSerialBuff.c:UARTRxBuffHead
      E2 9050 0103 LDS	R5,RD_UseSerialBuff.c:UARTRxBuffHead+1
      E4 1442      CP	R4,R2
      E5 0453      CPC	R5,R3
      E6 F459      BNE	0x00F2
      E7 9020 0106 LDS	R2,UARTRxBuffCounter
      E9 9030 0107 LDS	R3,UARTRxBuffCounter+1
      EB 2022      TST	R2
      EC F429      BNE	0x00F2
      ED 2033      TST	R3
      EE F419      BNE	0x00F2
      EF 9478      BSET	7
      F0 2700      CLR	R16
      F1 C00D      RJMP	0x00FF
      F2 E989      LDI	R24,0x99
      F3 E091      LDI	R25,1
      F4 91E0 0102 LDS	R30,RD_UseSerialBuff.c:UARTRxBuffHead
      F6 91F0 0103 LDS	R31,RD_UseSerialBuff.c:UARTRxBuffHead+1
      F8 0FE8      ADD	R30,R24
      F9 1FF9      ADC	R31,R25
      FA 8020      LDD	R2,Z+0
      FB 01F8      MOVW	R30,R16
      FC 8220      STD	Z+0,R2
      FD 9478      BSET	7
(0169)     (
(0170)         if ((UARTRxBuffHead == UARTRxBuffTail) 
(0171)          && (UARTRxBuffCounter == 0))
(0172)         {
(0173)             SEI();
(0174)             return FALSE;
(0175)         }
(0176)         (*pData) = UARTRxBuff[UARTRxBuffHead];
(0177)     )		
(0178)     return TRUE;
      FE E001      LDI	R16,1
      FF 9508      RET
(0179) }
(0180) 
(0181) /***********************************************************
(0182) *  函数说明:向通讯输入缓冲区添加数据函数                  *
(0183) *  输入:    收到的数据                                    *
(0184) *  输出:    无                                            *
(0185) *  调用函数:无                                            *
(0186) ***********************************************************/
(0187) BOOL UARTaddDataToRxBuff(uint8  Data)
(0188) {
(0189)     SAFE_CODE_PERFORMANCE
_UARTaddDataToRxBuff:
  Data                 --> R16
     100 94F8      BCLR	7
     101 9020 0104 LDS	R2,RD_UseSerialBuff.c:UARTRxBuffTail
     103 9030 0105 LDS	R3,RD_UseSerialBuff.c:UARTRxBuffTail+1
     105 9040 0102 LDS	R4,RD_UseSerialBuff.c:UARTRxBuffHead
     107 9050 0103 LDS	R5,RD_UseSerialBuff.c:UARTRxBuffHead+1
     109 1442      CP	R4,R2
     10A 0453      CPC	R5,R3
     10B F459      BNE	0x0117
     10C 9180 0106 LDS	R24,UARTRxBuffCounter
     10E 9190 0107 LDS	R25,UARTRxBuffCounter+1
     110 3880      CPI	R24,0x80
     111 E0E0      LDI	R30,0
     112 079E      CPC	R25,R30
     113 F419      BNE	0x0117
     114 9478      BSET	7
     115 2700      CLR	R16
     116 C029      RJMP	0x0140
     117 9020 0104 LDS	R2,RD_UseSerialBuff.c:UARTRxBuffTail
     119 9030 0105 LDS	R3,RD_UseSerialBuff.c:UARTRxBuffTail+1
     11B 01C1      MOVW	R24,R2
     11C 9601      ADIW	R24,1
     11D 9390 0105 STS	RD_UseSerialBuff.c:UARTRxBuffTail+1,R25
     11F 9380 0104 STS	RD_UseSerialBuff.c:UARTRxBuffTail,R24
     121 E989      LDI	R24,0x99
     122 E091      LDI	R25,1
     123 01F1      MOVW	R30,R2
     124 0FE8      ADD	R30,R24
     125 1FF9      ADC	R31,R25
     126 8300      STD	Z+0,R16
     127 9180 0106 LDS	R24,UARTRxBuffCounter
     129 9190 0107 LDS	R25,UARTRxBuffCounter+1
     12B 9601      ADIW	R24,1
     12C 9390 0107 STS	UARTRxBuffCounter+1,R25
     12E 9380 0106 STS	UARTRxBuffCounter,R24
     130 9180 0104 LDS	R24,RD_UseSerialBuff.c:UARTRxBuffTail
     132 9190 0105 LDS	R25,RD_UseSerialBuff.c:UARTRxBuffTail+1
     134 3880      CPI	R24,0x80
     135 E0E0      LDI	R30,0
     136 079E      CPC	R25,R30
     137 F431      BNE	0x013E
     138 2422      CLR	R2
     139 2433      CLR	R3
     13A 9230 0105 STS	RD_UseSerialBuff.c:UARTRxBuffTail+1,R3
     13C 9220 0104 STS	RD_UseSerialBuff.c:UARTRxBuffTail,R2
     13E 9478      BSET	7
(0190)     (
(0191)         if ((UARTRxBuffHead == UARTRxBuffTail) 
(0192)          && (UARTRxBuffCounter == SERIAL_RX_BUFF_SIZE))
(0193)         {
(0194)             SEI();
(0195)             return FALSE;
(0196)         }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -