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

📄 m16ds1302.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0016) 
(0017) uchar RecvFlag = 0;			  		//串口接收到数据中断标志
(0018) uchar DispFlag = 0;					//送显时间标志
(0019) uchar temp1;   	 					//暂存得串口得到的数据
(0020) /*-----------------------------------------------------------------
(0021) 函数名称: void Uart0Init(void) 
(0022) 函数功能: 串口初始化
(0023) 		  波特率 600 0.2% 字符长度 8bit 无奇偶校验
(0024) 参    数: 
(0025) 返 回 值: 无
(0026) -----------------------------------------------------------------*/
(0027) void Uart0Init(void)
(0028) {
(0029)  	UCSRB = 0x00; 					//关串口
_Uart0Init:
    0103 2422      CLR	R2
    0104 B82A      OUT	0x0A,R2
(0030)  	UCSRA = 0x02;					//倍速模式   M16中文P151
    0105 E082      LDI	R24,2
    0106 B98B      OUT	0x0B,R24
(0031)  	UCSRC = BIT(URSEL) | 0x06;		//写UCSRC寄存器,设定8个bit
    0107 E886      LDI	R24,0x86
    0108 BD80      OUT	0x20,R24
(0032)  	UBRR  = 12;	 	  	   		//设定串口波特率为600
    0109 E08C      LDI	R24,0xC
    010A B989      OUT	0x09,R24
(0033)  	UCSRB = 0x98;					//开串口
    010B E988      LDI	R24,0x98
    010C B98A      OUT	0x0A,R24
    010D 9508      RET
_UartRecvData:
    010E 922A      ST	R2,-Y
    010F 938A      ST	R24,-Y
    0110 B62F      IN	R2,0x3F
    0111 922A      ST	R2,-Y
(0034) }
(0035) /*-----------------------------------------------------------------
(0036) 函数名称: void UartRecvData(void)
(0037) 函数功能: 
(0038) 参    数: 
(0039) 返 回 值: 无
(0040) -----------------------------------------------------------------*/
(0041) #pragma interrupt_handler UartRecvData:12
(0042) void UartRecvData(void)
(0043) {
(0044)  	temp1 = UDR;
    0112 B02C      IN	R2,0x0C
    0113 92200062  STS	temp1,R2
(0045) 	RecvFlag = 1;
    0115 E081      LDI	R24,1
    0116 93800060  STS	RecvFlag,R24
    0118 9029      LD	R2,Y+
    0119 BE2F      OUT	0x3F,R2
    011A 9189      LD	R24,Y+
    011B 9029      LD	R2,Y+
    011C 9518      RETI
_UartTransmitData:
  i                    --> R20
  len                  --> R18
  SendData             --> R16
    011D 940E019E  CALL	push_gset1
(0046) }
(0047) /*-----------------------------------------------------------------
(0048) 函数名称: void UartTransmitData(uchar *SendData, uchar len)
(0049) 函数功能: 发送字符串
(0050) 参    数: SendData  发送字符串的首地址
(0051) 	  	  len		发送字符串的长度
(0052) 返 回 值: 无
(0053) -----------------------------------------------------------------*/
(0054) void UartTransmitData(uchar *SendData, uint len)
(0055) {
(0056)  	uint i;
(0057) 	for( i = 0; i < len; i++)
    011F 2744      CLR	R20
    0120 2755      CLR	R21
    0121 C009      RJMP	0x012B
(0058) 	{
(0059)   		while(!(UCSRA&0x20));  				//判断数据寄存器是否为空
    0122 9B5D      SBIS	0x0B,5
    0123 CFFE      RJMP	0x0122
(0060) 			UDR = SendData[i];
    0124 01FA      MOVW	R30,R20
    0125 0FE0      ADD	R30,R16
    0126 1FF1      ADC	R31,R17
    0127 8020      LDD	R2,Z+0
    0128 B82C      OUT	0x0C,R2
    0129 5F4F      SUBI	R20,0xFF
    012A 4F5F      SBCI	R21,0xFF
    012B 1742      CP	R20,R18
    012C 0753      CPC	R21,R19
    012D F3A0      BCS	0x0122
    012E 940E01A1  CALL	pop_gset1
    0130 9508      RET
(0061) 	}
(0062) }
(0063) //TIMER1 initialize - prescale:256
(0064) // WGM: 0) Normal, TOP=0xFFFF
(0065) // desired value: 4s
(0066) // actual value:  4s (0.0%)
(0067) void Timer1Init(void)
(0068) {
(0069)  TCCR1B = 0x00; //stop
_Timer1Init:
    0131 2422      CLR	R2
    0132 BC2E      OUT	0x2E,R2
(0070)  TCNT1H = 0xC2; //setup
    0133 EC82      LDI	R24,0xC2
    0134 BD8D      OUT	0x2D,R24
(0071)  TCNT1L = 0xF7;
    0135 EF87      LDI	R24,0xF7
    0136 BD8C      OUT	0x2C,R24
(0072)  OCR1AH = 0x0F;
    0137 E08F      LDI	R24,0xF
    0138 BD8B      OUT	0x2B,R24
(0073)  OCR1AL = 0x42;
    0139 E482      LDI	R24,0x42
    013A BD8A      OUT	0x2A,R24
(0074)  OCR1BH = 0x0F;
    013B E08F      LDI	R24,0xF
    013C BD89      OUT	0x29,R24
(0075)  OCR1BL = 0x42;
    013D E482      LDI	R24,0x42
    013E BD88      OUT	0x28,R24
(0076)  ICR1H  = 0x0F;
    013F E08F      LDI	R24,0xF
    0140 BD87      OUT	0x27,R24
(0077)  ICR1L  = 0x42;
    0141 E482      LDI	R24,0x42
    0142 BD86      OUT	0x26,R24
(0078)  TCCR1A = 0x00;
    0143 BC2F      OUT	0x2F,R2
(0079)  TCCR1B = 0x04; //start Timer
    0144 E084      LDI	R24,4
    0145 BD8E      OUT	0x2E,R24
    0146 9508      RET
_timer1_ovf_isr:
    0147 938A      ST	R24,-Y
    0148 B78F      IN	R24,0x3F
    0149 938A      ST	R24,-Y
(0080) }
(0081) 
(0082) #pragma interrupt_handler timer1_ovf_isr:9
(0083) void timer1_ovf_isr(void)
(0084) {
(0085)  	TCNT1H = 0xC2;		  				 //重计数
    014A EC82      LDI	R24,0xC2
    014B BD8D      OUT	0x2D,R24
(0086)  	TCNT1L = 0xF7; 
    014C EF87      LDI	R24,0xF7
    014D BD8C      OUT	0x2C,R24
(0087) 	DispFlag = 1;  						 //送显示
    014E E081      LDI	R24,1
    014F 93800061  STS	DispFlag,R24
    0151 9189      LD	R24,Y+
    0152 BF8F      OUT	0x3F,R24
    0153 9189      LD	R24,Y+
    0154 9518      RETI
(0088) }
(0089) /*-----------------------------------------------------------------
(0090) 函数名称: void InitDevices(void) 
(0091) 函数功能: 初始化各种信息
(0092) 参    数: 
(0093) 返 回 值: 无
(0094) -----------------------------------------------------------------*/
(0095) void InitDevices(void)
(0096) {
(0097)  	CLI(); 			  					//关全部中断
_InitDevices:
    0155 94F8      BCLR	7
(0098)  	Uart0Init();
    0156 DFAC      RCALL	_Uart0Init
(0099) 	Timer1Init();
    0157 DFD9      RCALL	_Timer1Init
(0100) 	DS1302Init();
    0158 DFA6      RCALL	_DS1302Init
(0101) 	
(0102) 	TIMSK = 0x04;
    0159 E084      LDI	R24,4
    015A BF89      OUT	0x39,R24
(0103)  	SEI();   	 	   					//开全中断
    015B 9478      BSET	7
    015C 9508      RET
_main:
  i                    --> Y+2
  temp                 --> Y+1
    015D 9724      SBIW	R28,4
(0104) }
(0105) 
(0106) 
(0107) void main(void)
(0108) {
(0109)  	uchar temp[3],i;
(0110)  	InitDevices();
    015E DFF6      RCALL	_InitDevices
(0111) 	DDRD = 0xff;
    015F EF8F      LDI	R24,0xFF
    0160 BB81      OUT	0x11,R24
(0112) 	DS1302SetTime(0x10,0x30,0x25);
    0161 E285      LDI	R24,0x25
    0162 8388      STD	Y+0,R24
    0163 E320      LDI	R18,0x30
    0164 E100      LDI	R16,0x10
    0165 DF74      RCALL	_DS1302SetTime
    0166 C011      RJMP	0x0178
(0113) 	while(1)
(0114) 	{
(0115) 	 	if( DispFlag)
    0167 90200061  LDS	R2,DispFlag
    0169 2022      TST	R2
    016A F069      BEQ	0x0178
(0116) 		{
(0117) //		 	i = DS1302Read(0x83);
(0118) 			DS1302GetTime(temp);
    016B 018E      MOVW	R16,R28
    016C 5F0F      SUBI	R16,0xFF
    016D 4F1F      SBCI	R17,0xFF
    016E DF7B      RCALL	_DS1302GetTime
(0119) 			UartTransmitData(temp,3);
    016F E023      LDI	R18,3
    0170 E030      LDI	R19,0
    0171 018E      MOVW	R16,R28
    0172 5F0F      SUBI	R16,0xFF
    0173 4F1F      SBCI	R17,0xFF
    0174 DFA8      RCALL	_UartTransmitData
(0120) 			DispFlag = 0;
FILE: <library>
    0175 2422      CLR	R2
    0176 92200061  STS	DispFlag,R2
    0178 CFEE      RJMP	0x0167
    0179 9624      ADIW	R28,4
    017A 9508      RET
mod8u:
    017B 9468      BSET	6
    017C C001      RJMP	xdiv8u
div8u:
    017D 94E8      BCLR	6
xdiv8u:
    017E 932A      ST	R18,-Y
    017F 92FA      ST	R15,-Y
    0180 92EA      ST	R14,-Y
    0181 24FF      CLR	R15
    0182 24EE      CLR	R14
    0183 E120      LDI	R18,0x10
    0184 0F00      LSL	R16
    0185 1CFF      ROL	R15
    0186 1CEE      ROL	R14
    0187 16E1      CP	R14,R17
    0188 F010      BCS	0x018B
    0189 1AE1      SUB	R14,R17
    018A 9503      INC	R16
    018B 952A      DEC	R18
    018C F7B9      BNE	0x0184
    018D F40E      BRTC	0x018F
    018E 2D0E      MOV	R16,R14
    018F 90E9      LD	R14,Y+
    0190 90F9      LD	R15,Y+
    0191 9129      LD	R18,Y+
    0192 9508      RET
pop_gset2:
    0193 E0E2      LDI	R30,2
    0194 940C01A2  JMP	pop
push_gset5:
    0196 92FA      ST	R15,-Y
    0197 92EA      ST	R14,-Y
push_gset4:
    0198 92DA      ST	R13,-Y
    0199 92CA      ST	R12,-Y
push_gset3:
    019A 92BA      ST	R11,-Y
    019B 92AA      ST	R10,-Y
push_gset2:
    019C 937A      ST	R23,-Y
    019D 936A      ST	R22,-Y
push_gset1:
    019E 935A      ST	R21,-Y
    019F 934A      ST	R20,-Y
    01A0 9508      RET
pop_gset1:
    01A1 E0E1      LDI	R30,1
pop:
    01A2 9149      LD	R20,Y+
    01A3 9159      LD	R21,Y+
    01A4 FDE0      SBRC	R30,0
    01A5 9508      RET
    01A6 9169      LD	R22,Y+
    01A7 9179      LD	R23,Y+
    01A8 FDE1      SBRC	R30,1
    01A9 9508      RET
    01AA 90A9      LD	R10,Y+
    01AB 90B9      LD	R11,Y+
    01AC FDE2      SBRC	R30,2
    01AD 9508      RET
    01AE 90C9      LD	R12,Y+
    01AF 90D9      LD	R13,Y+
    01B0 FDE3      SBRC	R30,3
    01B1 9508      RET
    01B2 90E9      LD	R14,Y+
    01B3 90F9      LD	R15,Y+
    01B4 9508      RET
lsl8:
    01B5 2311      TST	R17
    01B6 F019      BEQ	0x01BA
    01B7 0F00      LSL	R16
    01B8 951A      DEC	R17
    01B9 CFFB      RJMP	lsl8
    01BA 9508      RET

⌨️ 快捷键说明

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