📄 main.lis
字号:
010A ; //DS1302_RST=0
010A ; #define Clr_DS1302_RST() PORTD&=~(1<<DS1302_RST)
010A ; //DS1302_SDA=1
010A ; #define Set_DS1302_SDA() PORTD|=1<<DS1302_SDA
010A ; //DS1302_SDA=0
010A ; #define Clr_DS1302_SDA() PORTD&=~(1<<DS1302_SDA)
010A ; //DS1302_SCLK=1
010A ; #define Set_DS1302_SCLK() PORTD|=1<<DS1302_SCLK
010A ; //DS1302_SCLK=0
010A ; #define Clr_DS1302_SCLK() PORTD&=~(1<<DS1302_SCLK)
010A ; //DS1302的SDA置为输出脚
010A ; #define Set_DS1302_DDRSDA() DDRD|=1<<DS1302_SDA
010A ; //DS1302的SDA置为输入脚
010A ; #define Clr_DS1302_DDRSDA() DDRD&=~(1<<DS1302_SDA)
010A ; #define DS1302_SEC_Reg 0x80
010A ; #define DS1302_MIN_Reg 0x82
010A ; #define DS1302_HR_Reg 0x84
010A ; #define DS1302_DATE_Reg 0x86
010A ; #define DS1302_MONTH_Reg 0x88
010A ; #define DS1302_DAY_Reg 0x8a
010A ; #define DS1302_YEAR_Reg 0x8c
010A ; #define DS1302_CONTROL_Reg 0x8e
010A ; #define DS1302_CHARGER_Reg 0x90
010A ; #define DS1302_CLKBURST_Reg 0xbe
010A ; //全局变量
010A ; //为了方便,我把个位和十位分开了
010A ; uchar year1=0x88;
010A ; uchar year0=0x88;
010A ; uchar month1=0x88;
010A ; uchar month0=0x88;
010A ; uchar date0=0x88;
010A ; uchar date1=0x88;
010A ; uchar day=0x88;
010A ; uchar hour1=0x88;
010A ; uchar hour0=0x88;
010A ; uchar minute1=0x88;
010A ; uchar minute0=0x88;
010A ; uchar second1=0x88;
010A ; uchar second0=0x88;
010A ; void DS1302_Init(void);
010A ; uchar Check_DS1302(void);
010A ; uchar DS1302_Read(uchar reg);
010A ; void DS1302_Write(uchar reg,uchar data);
010A ; void ReadTime(void);
010A ; //////////////////////////////////////////////
010A ;
010A ; void port_init(void)
010A ; {
010A .dbline 571
010A ; PORTA = 0x00;
010A 2224 clr R2
010C 2BBA out 0x1b,R2
010E .dbline 572
010E ; DDRA = 0xff;//PORTA0-PORTA7 ==> OUTPUT CHAR DATA
010E 8FEF ldi R24,255
0110 8ABB out 0x1a,R24
0112 .dbline 573
0112 ; PORTB = 0x00;
0112 28BA out 0x18,R2
0114 .dbline 574
0114 ; DDRB = 0x00;
0114 27BA out 0x17,R2
0116 .dbline 575
0116 ; PORTC = 0xc3;//PORTC7,PORTC6,PORTC1,PORTC0 ==> key input ,enable_up
0116 83EC ldi R24,195
0118 85BB out 0x15,R24
011A .dbline 576
011A ; DDRC = 0x00;//PC7,PC6,PC1,PC0 ==> PRESS KEY INPUT ; PC2PC3PC4PC5 ==>JTAG USE
011A 24BA out 0x14,R2
011C .dbline 577
011C ; PORTD = 0xf8;//PORTD3-PORTD7 ==> LED CS ,enable_up ;
011C 88EF ldi R24,248
011E 82BB out 0x12,R24
0120 .dbline 578
0120 ; DDRD = 0xff;//PD3,PD4,PD5,PD6,PD7 ==>LED CS USE ;PD2,PD1,PD0 OUTPUT DS1302 USE
0120 8FEF ldi R24,255
0122 81BB out 0x11,R24
0124 .dbline -2
0124 L45:
0124 .dbline 0 ; func end
0124 0895 ret
0126 .dbend
0126 .dbfunc e init_devices _init_devices fV
.even
0126 _init_devices::
0126 .dbline -1
0126 .dbline 583
0126 ; }
0126 ;
0126 ; //call this routine to initialize all peripherals
0126 ; void init_devices(void)
0126 ; {
0126 .dbline 586
0126 ; //stop errant interrupts until set up
0126 ; // CLI(); //disable all interrupts
0126 ; port_init();
0126 F1DF xcall _port_init
0128 .dbline 587
0128 ; spi_init(); //初始化SPI接口
0128 F8D6 xcall _spi_init
012A .dbline 589
012A ;
012A ; MCUCR = 0x00;
012A 2224 clr R2
012C 25BE out 0x35,R2
012E .dbline 590
012E ; GICR = 0x00;
012E 2BBE out 0x3b,R2
0130 .dbline 591
0130 ; TIMSK = 0x00; //timer interrupt sources
0130 29BE out 0x39,R2
0132 .dbline -2
0132 L46:
0132 .dbline 0 ; func end
0132 0895 ret
0134 .dbend
0134 .dbfunc e PasswordProcess _PasswordProcess fV
0134 ; val -> R20,R21
.even
0134 _PasswordProcess::
0134 0E940000 xcall push_gset1
0138 .dbline -1
0138 .dbline 597
0138 ; // SEI(); //re-enable interrupts
0138 ; //all peripherals are now initialized
0138 ; }
0138 ;
0138 ; void PasswordProcess(void)
0138 ; {
0138 .dbline 599
0138 ; int val;
0138 ; EepromDayDataRd();
0138 0E941F18 xcall _EepromDayDataRd
013C .dbline 600
013C ; if(DayData[0]==0)
013C 20903F00 lds R2,_DayData
0140 2220 tst R2
0142 21F4 brne L48
0144 .dbline 601
0144 ; {
0144 .dbline 602
0144 ; Password_alarm=TRUE;
0144 81E0 ldi R24,1
0146 8093CB00 sts _Password_alarm,R24
014A .dbline 603
014A ; }
014A 45C0 xjmp L49
014C L48:
014C .dbline 605
014C ; else
014C ; {
014C .dbline 606
014C ; ReadTime();
014C 0E940319 xcall _ReadTime
0150 .dbline 607
0150 ; EepromDateValueRd();
0150 0E943918 xcall _EepromDateValueRd
0154 .dbline 609
0154 ; // if((year0==0 && year1==0 &&month1==0 &&month0==1 &&date1==0&&date0==1)||(year0==0xf && year1==0xf &&month1==0x1 &&month0==0xf &&date1==0x3&&date0==0xf))
0154 ; if((year1==0 && month1==0 && date1==0)||(year1==0xa5 && month1==0x1f && date1==0x3f)) //070616 modify
0154 20900000 lds R2,_year1
0158 2220 tst R2
015A 41F4 brne L54
015C 20900200 lds R2,_month1
0160 2220 tst R2
0162 21F4 brne L54
0164 20900500 lds R2,_date1
0168 2220 tst R2
016A 61F0 breq L52
016C L54:
016C 80910000 lds R24,_year1
0170 853A cpi R24,165
0172 61F4 brne L50
0174 80910200 lds R24,_month1
0178 8F31 cpi R24,31
017A 41F4 brne L50
017C 80910500 lds R24,_date1
0180 8F33 cpi R24,63
0182 21F4 brne L50
0184 L52:
0184 .dbline 610
0184 ; {
0184 .dbline 611
0184 ; Password_alarm=TRUE;
0184 81E0 ldi R24,1
0186 8093CB00 sts _Password_alarm,R24
018A .dbline 612
018A ; }
018A 25C0 xjmp L51
018C L50:
018C .dbline 614
018C ; else
018C ; {
018C .dbline 615
018C ; val=CompareDate();
018C 0E94AA19 xcall _CompareDate
0190 A801 movw R20,R16
0192 .dbline 616
0192 0F3F cpi R16,255
0194 EFEF ldi R30,255
0196 1E07 cpc R17,R30
0198 31F0 breq L57
019A 20903F00 lds R2,_DayData
019E 3324 clr R3
01A0 2016 cp R2,R16
01A2 3106 cpc R3,R17
01A4 24F4 brge L55
01A6 L57:
01A6 .dbline 616
01A6 ; if((val==-1) ||( val > DayData[0])) Password_alarm=TRUE;
01A6 81E0 ldi R24,1
01A8 8093CB00 sts _Password_alarm,R24
01AC 14C0 xjmp L56
01AE L55:
01AE .dbline 618
01AE ; else
01AE ; {
01AE .dbline 619
01AE ; if(val!=Oneday)
01AE 20903E00 lds R2,_Oneday
01B2 3324 clr R3
01B4 4215 cp R20,R2
01B6 5305 cpc R21,R3
01B8 59F0 breq L58
01BA .dbline 620
01BA ; {
01BA .dbline 621
01BA ; Oneday=val;
01BA 40933E00 sts _Oneday,R20
01BE .dbline 622
01BE ; DayData[0]=DayData[0]-val;
01BE 20903F00 lds R2,_DayData
01C2 3324 clr R3
01C4 241A sub R2,R20
01C6 350A sbc R3,R21
01C8 20923F00 sts _DayData,R2
01CC .dbline 623
01CC ; EepromDayDataWr();
01CC 0E942C18 xcall _EepromDayDataWr
01D0 .dbline 624
01D0 ; }
01D0 L58:
01D0 .dbline 625
01D0 ; Password_alarm=FALSE;
01D0 2224 clr R2
01D2 2092CB00 sts _Password_alarm,R2
01D6 .dbline 626
01D6 ; }
01D6 L56:
01D6 .dbline 627
01D6 ; }
01D6 L51:
01D6 .dbline 628
01D6 L49:
01D6 .dbline -2
01D6 L47:
01D6 0E940000 xcall pop_gset1
01DA .dbline 0 ; func end
01DA 0895 ret
01DC .dbsym r val 20 I
01DC .dbend
01DC .dbfunc e main _main fV
01DC ; KK -> y+13
01DC ; tempPW -> y+0
01DC ; kind -> y+12
01DC ; pwloop -> y+10
01DC ; i -> y+9
01DC ; bit -> y+8
01DC ; loop -> y+6
.even
01DC _main::
01DC 6197 sbiw R28,17
01DE .dbline -1
01DE .dbline 632
01DE ; }
01DE ; }
01DE ;
01DE ; void main(void)
01DE ; {
01DE .dbline 633
01DE ; char bit,i=0,kind=0;
01DE 0024 clr R0
01E0 0986 std y+9,R0
01E2 .dbline 633
01E2 0C86 std y+12,R0
01E4 .dbli
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -