📄 project.lst
字号:
(0007) //********************************************************************
(0008)
(0009) #include "includes.h"
(0010)
(0011) struct SCI_Buffer stSciBuffer;
(0012)
(0013) INT8U bSCI_Event = 0; //SCI Event
(0014) INT8U bBuzzer_Count = 0; //Buzzer ON Time
(0015)
(0016) //********************************************************************
(0017) // Function : sSet_SCI_Event
(0018) // Input : event - SCI Event
(0019) // Output : none
(0020) // Description : Interface Function
(0021) //********************************************************************
(0022) void sSet_SCI_Event(INT8U event)
(0023) {
(0024) bSCI_Event = event;
_sSet_SCI_Event:
event --> R16
02D9 93000079 STS 0x79,R16
(0025) }
02DB 9508 RET
(0026)
(0027) //********************************************************************
(0028) // Function : sbGet_SCI_Event
(0029) // Input : none
(0030) // Output : SCI Event
(0031) // Description : Interface Function
(0032) //********************************************************************
(0033) INT8U sbGet_SCI_Event(void)
(0034) {
(0035) INT8U event;
(0036) event = bSCI_Event;
_sbGet_SCI_Event:
event --> R16
02DC 91000079 LDS R16,0x79
(0037) bSCI_Event = 0;
02DE 2422 CLR R2
02DF 92200079 STS 0x79,R2
(0038) return(event);
02E1 9508 RET
(0039) }
(0040)
(0041) //********************************************************************
(0042) // Function : sSet_Buzzer_Count
(0043) // Input : bCount - Buzzer ON Time
(0044) // Output : none
(0045) // Description : Interface Function
(0046) //********************************************************************
(0047) void sSet_Buzzer_Count(INT8U bCount)
(0048) {
(0049) bBuzzer_Count = bCount;
_sSet_Buzzer_Count:
bCount --> R16
02E2 9300007A STS 0x7A,R16
(0050) }
02E4 9508 RET
(0051)
(0052) //********************************************************************
(0053) // Function : sbGet_Buzzer_Count
(0054) // Input : none
(0055) // Output : Buzzer ON Time
(0056) // Description : Interface Function
(0057) //********************************************************************
(0058) INT8U sbGet_Buzzer_Count(void)
(0059) {
(0060) return(bBuzzer_Count);
_sbGet_Buzzer_Count:
02E5 9100007A LDS R16,0x7A
02E7 9508 RET
(0061) }
(0062)
(0063) //********************************************************************
(0064) // Function : Init_UART
(0065) // Input : none
(0066) // Output : none
(0067) // Description : ATmega16 UART Initialization,9600/N/8/1
(0068) //********************************************************************
(0069) void Init_UART(void)
(0070) {
(0071) UCSRA = 0x00;
_Init_UART:
02E8 2422 CLR R2
02E9 B82B OUT 0x0B,R2
(0072) UCSRB = 0xD8;
02EA ED88 LDI R24,0xD8
02EB B98A OUT 0x0A,R24
(0073) UCSRC = 0x86;
02EC E886 LDI R24,0x86
02ED BD80 OUT 0x20,R24
(0074) UBRRL = 0x33;
02EE E383 LDI R24,0x33
02EF B989 OUT 0x09,R24
(0075) SCI_Task_Init();
(0076) }
02F0 C000 RJMP _SCI_Task_Init
(0077)
(0078) //********************************************************************
(0079) // Function : SCI_Task_Init
(0080) // Input : none
(0081) // Output : none
(0082) // Description : Enable UART RX Interrupt and Initialize Buffer
(0083) //********************************************************************
(0084) void SCI_Task_Init(void)
(0085) {
(0086) Enable_UART_RX_INT();
02F1 D003 RCALL _Enable_UART_RX_INT
(0087) SciBuffer_Init(&stSciBuffer);
02F2 E304 LDI R16,0x34
02F3 E011 LDI R17,1
(0088) }
02F4 C042 RJMP _SciBuffer_Init
(0089)
(0090) //********************************************************************
(0091) // Function : Enable_UART_RX_INT
(0092) // Input : none
(0093) // Output : none
(0094) // Description : Enable UART RX Interrupt
(0095) //********************************************************************
(0096) void Enable_UART_RX_INT(void)
(0097) {
(0098) UCSRB |= 0x80;
_Enable_UART_RX_INT:
02F5 9A57 SBI 0x0A,7
(0099) }
02F6 9508 RET
(0100)
(0101) //********************************************************************
(0102) // Function : Enable_UART_TX_INT
(0103) // Input : none
(0104) // Output : none
(0105) // Description : Enable UART TX Interrupt
(0106) //********************************************************************
(0107) void Enable_UART_TX_INT(void)
(0108) {
(0109) UCSRB |= 0x40;
_Enable_UART_TX_INT:
02F7 9A56 SBI 0x0A,6
(0110) }
02F8 9508 RET
(0111)
(0112) //********************************************************************
(0113) // Function : Disable_UART_RX_INT
(0114) // Input : none
(0115) // Output : none
(0116) // Description : Disable UART RX Interrupt
(0117) //********************************************************************
(0118) void Disable_UART_RX_INT(void)
(0119) {
(0120) UCSRB &= ~0x80;
_Disable_UART_RX_INT:
02F9 9857 CBI 0x0A,7
(0121) }
02FA 9508 RET
(0122)
(0123) //********************************************************************
(0124) // Function : Disable_UART_TX_INT
(0125) // Input : none
(0126) // Output : none
(0127) // Description : Disable UART TX Interrupt
(0128) //********************************************************************
(0129) void Disable_UART_TX_INT(void)
(0130) {
(0131) UCSRB &= ~0x40;
_Disable_UART_TX_INT:
02FB 9856 CBI 0x0A,6
(0132) }
02FC 9508 RET
(0133)
(0134) //********************************************************************
(0135) // Function : UART_TX_DATA
(0136) // Input : bData-data to be send
(0137) // Output : none
(0138) // Description : Write Data to UART TX Reigster
(0139) //********************************************************************
(0140) void UART_TX_DATA(INT8U bData)
(0141) {
(0142) UDR = bData;
_UART_TX_DATA:
bData --> R16
02FD B90C OUT 0x0C,R16
(0143) }
02FE 9508 RET
(0144)
(0145) //********************************************************************
(0146) // Function : UART_RX_DATA
(0147) // Input : none
(0148) // Output : data received
(0149) // Description : Get Received Data from Register
(0150) //********************************************************************
(0151) INT8U UART_RX_DATA(void)
(0152) {
(0153) return(UDR);
_UART_RX_DATA:
02FF B10C IN R16,0x0C
0300 9508 RET
_sUART_RX_ISR:
data --> R20
0301 940E093A CALL push_lset
0303 940E08E9 CALL push_gset1
(0154) }
(0155)
(0156) //********************************************************************
(0157) // Function : sUART_RX_ISR
(0158) // Input : none
(0159) // Output : none
(0160) // Description : UART RX Interrupt Service Routine
(0161) //********************************************************************
(0162) #pragma interrupt_handler sUART_RX_ISR:12
(0163) void sUART_RX_ISR(void)
(0164) {
(0165) INT8U data;
(0166) //step1:read receive register to clear interrupt flag
(0167) data = UART_RX_DATA();
0305 DFF9 RCALL _UART_RX_DATA
0306 2F40 MOV R20,R16
(0168) //step2:report event or store received char to buffer
(0169) if((data == 0x0A) || (data == 0x0D))
0307 300A CPI R16,0xA
0308 F011 BEQ 0x030B
0309 300D CPI R16,0xD
030A F459 BNE 0x0316
(0170) {
(0171) if(sbGetRxBufferEmptyStatus(&stSciBuffer) == false)
030B E304 LDI R16,0x34
030C E011 LDI R17,1
030D D07F RCALL _sbGetRxBufferEmptyStatus
030E 2300 TST R16
030F F451 BNE 0x031A
(0172) {
(0173) SciBuffer_Rx_Reset(&stSciBuffer);
0310 E304 LDI R16,0x34
0311 E011 LDI R17,1
0312 D082 RCALL _SciBuffer_Rx_Reset
(0174) sSet_SCI_Event(1);
0313 E001 LDI R16,1
0314 DFC4 RCALL _sSet_SCI_Event
(0175) }
(0176) }
0315 C004 RJMP 0x031A
(0177) else
(0178) {
(0179) SciBuffer_Rx_In(&stSciBuffer,data);
0316 2F24 MOV R18,R20
0317 E304 LDI R16,0x34
0318 E011 LDI R17,1
0319 D024 RCALL _SciBuffer_Rx_In
(0180) }
(0181) }
031A 940E08EC CALL pop_gset1
031C 940E0951 CALL pop_lset
031E 9518 RETI
_sUART_TX_ISR:
bData --> R20
031F 940E093A CALL push_lset
0321 940E08E9 CALL push_gset1
(0182)
(0183) //********************************************************************
(0184) // Function : sUART_TX_ISR
(0185) // Input : none
(0186) // Output : none
(0187) // Description : UART TX Interrupt Service Routine
(0188) //********************************************************************
(0189) #pragma interrupt_handler sUART_TX_ISR:14
(0190) void sUART_TX_ISR(void)
(0191) {
(0192) INT8U bData;
(0193) if(sbGetTxBufferNoEmptyStatus(&stSciBuffer) == true)
0323 E304 LDI R16,0x34
0324 E011 LDI R17,1
0325 D055 RCALL _sbGetTxBufferNoEmptyStatus
0326 3001 CPI R16,1
0327 F431 BNE 0x032E
(0194) {
(0195) bData = SciBuffer_Tx_Out(&stSciBuffer);
0328 E304 LDI R16,0x34
0329 E011 LDI R17,1
032A D029 RCALL _SciBuffer_Tx_Out
032B 2F40 MOV R20,R16
(0196) UART_TX_DATA(bData);
032C DFD0 RCALL _UART_TX_DATA
(0197) }
032D C004 RJMP 0x0332
(0198) else
(0199) {
(0200) Disable_UART_TX_INT();
032E DFCC RCALL _Disable_UART_TX_INT
(0201) SciBuffer_Tx_Reset(&stSciBuffer);
032F E304 LDI R16,0x34
0330 E011 LDI R17,1
0331 D067 RCALL _SciBuffer_Tx_Reset
(0202) }
(0203) }
0332 940E08EC CALL pop_gset1
0334 940E0951 CALL pop_lset
0336 9518 RETI
(0204)
(0205) //********************************************************************
(0206) // Function : SciBuffer_Init
(0207) // Input : ptr-pointer to SCI Buffer
(0208) // Output : none
(0209) // Description : Initialization of SCI Buffer
(0210) //********************************************************************
(0211) void SciBuffer_Init(struct SCI_Buffer *ptr)
(0212) {
(0213) ptr->bRxLength = 0;
_SciBuffer_Init:
ptr --> R16
0337 2422 CLR R2
0338 01F8 MOVW R30,R16
0339 8220 STD Z+0,R2
(0214) ptr->bTxLength = 0;
033A 8221 STD Z+1,R2
(0215) ptr->bTxBufferLength = 0;
033B 01F8 MOVW R30,R16
033C 8222 STD Z+2,R2
(0216) }
033D 9508 RET
(0217)
(0218) //********************************************************************
(0219) // Function : SciBuffer_Rx_In
(0220) // Input : ptr-pointer to SCI Buffer
(0221) // Output : none
(0222) // Description : Add data into the SCI RX Buffer
(0223) //********************************************************************
(0224) void SciBuffer_Rx_In(struct SCI_Buffer *ptr,INT8U bData)
(0225) {
(0226) if(ptr->bRxLength < cMaxRxLength)
_SciBuffer_Rx_In:
bData --> R18
ptr --> R16
033E 01F8 MOVW R30,R16
033F 8180 LDD R24,Z+0
0340 3382 CPI R24,0x32
0341 F460 BCC 0x034E
(0227) {
(0228) ptr->bRxBuffer[ptr->bRxLength] = bData;
0342 01CF MOVW R24,R30
0343 9603 ADIW R24,3
0344 81E0 LDD R30,Z+0
0345 27FF CLR R31
0346 0FE8 ADD R30,R24
0347 1FF9 ADC R31,R25
0348 8320 STD Z+0,R18
(0229) ptr->bRxLength++;
0349 01F8 MOVW R30,R16
034A 8180 LDD R24,Z+0
034B 5F8F SUBI R24,0xFF
034C 8380 STD Z+0,R24
(0230) }
034D C005 RJMP 0x0353
(0231) else
(0232) {
(0233) ptr->bRxBuffer[0] = bData;
034E 01F8 MOVW R30,R16
034F 8323 STD Z+3,R18
(0234) ptr->bRxLength = 1;
0350 E081 LDI R24,1
0351 01F8 MOVW R30,R16
0352 8380 STD Z+0,R24
(0235) }
(0236) }
0353 9508 RET
_SciBuffer_Tx_Out:
bData --> R20
ptr --> R16
0354 940E08E9 CALL push_gset1
(0237)
(0238) //********************************************************************
(0239) // Function : SciBuffer_Tx_Out
(0240) // Input : ptr-pointer to SCI Buffer
(0241) // Output : data from SCI TX Buffer
(0242) // Description : Get data from the SCI TX Buffer
(0243) //********************************************************************
(0244) INT8U SciBuffer_Tx_Out(struct SCI_Buffer *ptr)
(0245) {
(0246) INT8U bData;
(0247) bData = ptr->bTxBuffer[ptr->bTxLength];
0356 01C8 MOVW R24,R16
0357 96C5 ADIW R24,0x35
0358 01F8 MOVW R30,R16
0359 81E1 LDD R30,Z+1
035A 27FF CLR R31
035B 0FE8 ADD R30,R24
035C 1FF9 ADC R31,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -