?? m16ds1302.lst
字號:
(0016)
(0017) uchar RecvFlag = 0; //串口接收到數(shù)據(jù)中斷標(biāo)志
(0018) uchar DispFlag = 0; //送顯時間標(biāo)志
(0019) uchar temp1; //暫存得串口得到的數(shù)據(jù)
(0020) /*-----------------------------------------------------------------
(0021) 函數(shù)名稱: void Uart0Init(void)
(0022) 函數(shù)功能: 串口初始化
(0023) 波特率 600 0.2% 字符長度 8bit 無奇偶校驗
(0024) 參 數(shù):
(0025) 返 回 值: 無
(0026) -----------------------------------------------------------------*/
(0027) void Uart0Init(void)
(0028) {
(0029) UCSRB = 0x00; //關(guān)串口
_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寄存器,設(shè)定8個bit
0107 E886 LDI R24,0x86
0108 BD80 OUT 0x20,R24
(0032) UBRR = 12; //設(shè)定串口波特率為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) 函數(shù)名稱: void UartRecvData(void)
(0037) 函數(shù)功能:
(0038) 參 數(shù):
(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) 函數(shù)名稱: void UartTransmitData(uchar *SendData, uchar len)
(0049) 函數(shù)功能: 發(fā)送字符串
(0050) 參 數(shù): SendData 發(fā)送字符串的首地址
(0051) len 發(fā)送字符串的長度
(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)); //判斷數(shù)據(jù)寄存器是否為空
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; //重計數(shù)
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) 函數(shù)名稱: void InitDevices(void)
(0091) 函數(shù)功能: 初始化各種信息
(0092) 參 數(shù):
(0093) 返 回 值: 無
(0094) -----------------------------------------------------------------*/
(0095) void InitDevices(void)
(0096) {
(0097) CLI(); //關(guān)全部中斷
_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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -