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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -