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

📄 rtc-demo.asm

📁 DS1307 RTC real time clock header file for atmel AT89X5X
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;
			;    temp = x & 0b.0000.1111;
	MOVLW .15
	ANDWF x_2,W
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;    //=======================
			;    
			;    putc(':');
	MOVLW .58
	CALL  putc
			;
			;    //=======================
			;    x = read_eeprom(0); //Seconds
	CLRF  address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    temp = x & 0b.0111.0000; //Avoid the CH bit
	MOVLW .112
	ANDWF x_2,W
	MOVWF temp_2
			;    temp >>= 4;
	SWAPF temp_2,W
	ANDLW .15
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;    
			;    temp = x & 0b.0000.1111;
	MOVLW .15
	ANDWF x_2,W
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;    //=======================
			;    
			;    putc(' ');
	MOVLW .32
	CALL  putc
			;
			;    x = read_eeprom(2); //Read hours register for AM/PM
	MOVLW .2
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    if(x.5 == 1) printf("PM" , 0);
	BTFSS x_2,5
	GOTO  m041
	MOVLW .177
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    else printf("AM", 0);
	GOTO  m042
m041	MOVLW .180
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;
			;    //=======================
			;
			;    printf(" - ", 0);
m042	MOVLW .139
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;
			;    //=======================
			;    x = read_eeprom(3); //Read day
	MOVLW .3
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    if(x == 1) printf("Sunday", 0);
	DECFSZ x_2,W
	GOTO  m043
	MOVLW .243
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 2) printf("Monday", 0);
m043	MOVF  x_2,W
	XORLW .2
	BTFSS 0x03,Zero_
	GOTO  m044
	MOVLW .250
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 3) printf("Tuesday", 0);
m044	MOVF  x_2,W
	XORLW .3
	BTFSS 0x03,Zero_
	GOTO  m045
	MOVLW .1
	MOVWF nate_2
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 4) printf("Wednesday", 0);
m045	MOVF  x_2,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m046
	MOVLW .9
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 5) printf("Thursday", 0);
m046	MOVF  x_2,W
	XORLW .5
	BTFSS 0x03,Zero_
	GOTO  m047
	MOVLW .19
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 6) printf("Friday", 0);
m047	MOVF  x_2,W
	XORLW .6
	BTFSS 0x03,Zero_
	GOTO  m048
	MOVLW .28
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 7) printf("Saturday", 0);
m048	MOVF  x_2,W
	XORLW .7
	BTFSS 0x03,Zero_
	GOTO  m049
	MOVLW .35
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    
			;    putc(' ');
m049	MOVLW .32
	CALL  putc
			;    //=======================
			;    x = read_eeprom(5); //Read month
	MOVLW .5
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    
			;    temp = x & 0b.1111.0000; //Decode to month number
	MOVLW .240
	ANDWF x_2,W
	MOVWF temp_2
			;    x = x & 0b.0000.1111;
	MOVLW .15
	ANDWF x_2,1
			;    temp >>= 4;
	SWAPF temp_2,W
	ANDLW .15
	MOVWF temp_2
			;    temp *= 10;
	BCF   0x03,Carry
	RLF   temp_2,W
	MOVWF C7tmp
	CLRF  temp_2
	MOVLW .5
	MOVWF C6cnt
m050	MOVF  C7tmp,W
	ADDWF temp_2,1
	DECFSZ C6cnt,1
	GOTO  m050
			;    x = x + temp; //We now have a month number in x
	MOVF  temp_2,W
	ADDWF x_2,1
			;    if(x == 1) printf("January", 0); 
	DECFSZ x_2,W
	GOTO  m051
	MOVLW .44
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 2) printf("February", 0); 
m051	MOVF  x_2,W
	XORLW .2
	BTFSS 0x03,Zero_
	GOTO  m052
	MOVLW .52
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 3) printf("March", 0); 
m052	MOVF  x_2,W
	XORLW .3
	BTFSS 0x03,Zero_
	GOTO  m053
	MOVLW .61
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 4) printf("April", 0); 
m053	MOVF  x_2,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m054
	MOVLW .67
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 5) printf("May", 0); 
m054	MOVF  x_2,W
	XORLW .5
	BTFSS 0x03,Zero_
	GOTO  m055
	MOVLW .73
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 6) printf("June", 0); 
m055	MOVF  x_2,W
	XORLW .6
	BTFSS 0x03,Zero_
	GOTO  m056
	MOVLW .77
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 7) printf("July", 0); 
m056	MOVF  x_2,W
	XORLW .7
	BTFSS 0x03,Zero_
	GOTO  m057
	MOVLW .82
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 8) printf("August", 0); 
m057	MOVF  x_2,W
	XORLW .8
	BTFSS 0x03,Zero_
	GOTO  m058
	MOVLW .87
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 9) printf("September", 0); 
m058	MOVF  x_2,W
	XORLW .9
	BTFSS 0x03,Zero_
	GOTO  m059
	MOVLW .94
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 10) printf("October", 0); 
m059	MOVF  x_2,W
	XORLW .10
	BTFSS 0x03,Zero_
	GOTO  m060
	MOVLW .104
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 11) printf("November", 0); 
m060	MOVF  x_2,W
	XORLW .11
	BTFSS 0x03,Zero_
	GOTO  m061
	MOVLW .112
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    if(x == 12) printf("December", 0); 
m061	MOVF  x_2,W
	XORLW .12
	BTFSS 0x03,Zero_
	GOTO  m062
	MOVLW .121
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    
			;    putc(' ');
m062	MOVLW .32
	CALL  putc
			;    //=======================
			;    
			;    //=======================
			;    x = read_eeprom(4); //Read date
	MOVLW .4
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    
			;    temp = x & 0b.1111.0000; //Decode date to a number
	MOVLW .240
	ANDWF x_2,W
	MOVWF temp_2
			;    temp >>= 4;
	SWAPF temp_2,W
	ANDLW .15
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;
			;    temp = x & 0b.0000.1111;
	MOVLW .15
	ANDWF x_2,W
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;    
			;    putc(',');
	MOVLW .44
	CALL  putc
			;    putc(' ');
	MOVLW .32
	CALL  putc
			;    //=======================
			;
			;    //=======================
			;    x = read_eeprom(6); //Read year
	MOVLW .6
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;
			;    printf("20", 0);
	MOVLW .143
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;    
			;    temp = x & 0b.1111.0000; //Decode year to a number
	MOVLW .240
	ANDWF x_2,W
	MOVWF temp_2
			;    temp >>= 4;
	SWAPF temp_2,W
	ANDLW .15
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;
			;    temp = x & 0b.0000.1111;
	MOVLW .15
	ANDWF x_2,W
	MOVWF temp_2
			;    temp += '0';
	MOVLW .48
	ADDWF temp_2,1
			;    putc(temp);
	MOVF  temp_2,W
	CALL  putc
			;    //=======================
			;
			;    x = read_eeprom(7);
	MOVLW .7
	MOVWF address_2
	CLRF  address_2+1
	CALL  read_eeprom
	MOVWF x_2
			;    printf("\n\r  SQW Settings : %h ", x);
	MOVLW .146
	MOVWF nate_2
	CLRF  nate_2+1
	MOVF  x_2,W
	MOVWF my_byte
	CLRF  my_byte+1
	GOTO  printf
			;}
			;
			;//Allow user to input the current Calendar data and time into the DS1307 RTC
			;void rtc_programming(void)
			;{
rtc_programming
			;    //SCL is connected to RB0
			;    //SDA is connected to RB1
			;    
			;    uns8 temp, cell = 1, data_byte_in;
	MOVLW .1
	MOVWF cell
			;    
			;    uns8 hours = 1, minutes = 1, seconds = 1;
	MOVWF hours
	MOVWF minutes
	MOVWF seconds
			;    bit am_pm;
			;    #define PM 1
			;    #define AM 0
			;    
			;    //Time configuration
			;    //=========================================================
			;    printf("\n\r a/s change cell | +/- increase/decrease | p to program\n\r", 0);
	MOVLW .183
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;
			;    //Display delay and adjust as we go...
			;    while(1)
			;    {
			;        printf("%d:", hours);
m063	MOVLW .169
	MOVWF nate_2
	CLRF  nate_2+1
	MOVF  hours,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;        printf("%d:", minutes);
	MOVLW .169
	MOVWF nate_2
	CLRF  nate_2+1
	MOVF  minutes,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;        printf("%d ", seconds);
	MOVLW .173
	MOVWF nate_2
	CLRF  nate_2+1
	MOVF  seconds,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;        
			;        if (am_pm == PM) printf("PM", 0);
	BTFSS 0x2B,am_pm
	GOTO  m064
	MOVLW .177
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if (am_pm == AM) printf("AM", 0);
m064	BTFSC 0x2B,am_pm
	GOTO  m065
	MOVLW .180
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;
			;        data_byte_in = getc();
m065	CALL  getc
	MOVWF data_byte_in
			;        if(data_byte_in == 'a' && cell > 1) cell--;
	XORLW .97
	BTFSS 0x03,Zero_
	GOTO  m066
	MOVLW .2
	SUBWF cell,W
	BTFSC 0x03,Carry
	DECF  cell,1
			;        if(data_byte_in == 's' && cell < 4) cell++;
m066	MOVF  data_byte_in,W
	XORLW .115
	BTFSS 0x03,Zero_
	GOTO  m067
	MOVLW .4
	SUBWF cell,W
	BTFSS 0x03,Carry
	INCF  cell,1
			;
			;        if(data_byte_in == '+')
m067	MOVF  data_byte_in,W
	XORLW .43
	BTFSS 0x03,Zero_
	GOTO  m068
			;        {
			;            if(cell == 1) hours++;
	DECF  cell,W
	BTFSC 0x03,Zero_
	INCF  hours,1
			;            if(cell == 2) minutes++;
	MOVF  cell,W
	XORLW .2
	BTFSC 0x03,Zero_
	INCF  minutes,1
			;            if(cell == 3) seconds++;
	MOVF  cell,W
	XORLW .3
	BTFSC 0x03,Zero_
	INCF  seconds,1
			;            if(cell == 4) am_pm ^= 1;
	MOVF  cell,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m068
	MOVLW .1
	XORWF TtmpA43,1
			;        }
			;        if(data_byte_in == '-')
m068	MOVF  data_byte_in,W
	XORLW .45
	BTFSS 0x03,Zero_
	GOTO  m069
			;        {
			;            if(cell == 1) hours--;
	DECF  cell,W
	BTFSC 0x03,Zero_
	DECF  hours,1
			;            if(cell == 2) minutes--;
	MOVF  cell,W
	XORLW .2
	BTFSC 0x03,Zero_
	DECF  minutes,1
			;            if(cell == 3) seconds--;
	MOVF  cell,W
	XORLW .3
	BTFSC 0x03,Zero_
	DECF  seconds,1
			;            if(cell == 4) am_pm ^= 1;
	MOVF  cell,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m069
	MOVLW .1
	XORWF TtmpA43,1
			;        }
			;        
			;        if(data_byte_in == 'p') break;
m069	MOVF  data_byte_in,W
	XORLW .112
	BTFSC 0x03,Zero_
	GOTO  m070
			;
			;        putc('\r');
	MOVLW .13
	CALL  putc
			;        
			;    }
	GOTO  m063
			;
			;    temp = seconds / 10; //Convert seconds into BCD
m070	MOVF  seconds,W
	MOVWF C9tmp
	CLRF  C10rem
	MOVLW .8
	MOVWF C8cnt
m071	RLF   C9tmp,1
	RLF   C10rem,1
	MOVLW .10
	SUBWF C10rem,W
	BTFSS 0x03,Carry
	GOTO  m072
	MOVLW .10
	SUBWF C10rem,1
	BSF   0x03,Carry
m072	RLF   temp_3,1
	DECFSZ C8cnt,1
	GOTO  m071
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    printf(" --%h-- ", seconds);
	MOVLW .146
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	MOVF  seconds,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;    seconds %= 10;
	MOVF  seconds,W
	MOVWF C12tmp
	CLRF  seconds
	MOVLW .8
	MOVWF C11cnt
m073	RLF   C12tmp,1
	RLF   seconds,1
	MOVLW .10
	SUBWF seconds,W
	BTFSS 0x03,Carry
	GOTO  m074
	MOVLW .10
	SUBWF seconds,1
m074	DECFSZ C11cnt,1
	GOTO  m073
			;    printf(" --%h-- ", seconds);
	MOVLW .146
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	MOVF  seconds,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;    seconds = temp | seconds;
	MOVF  temp_3,W
	IORWF seconds,1
			;    seconds &= 0b.0111.1111; //CH Bit is bit 7 - 0 to enable clock.
	BCF   seconds,7
			;    write_eeprom(0, seconds); //Load seconds register
	CLRF  address
	CLRF  address+1
	MOVF  seconds,W
	CALL  write_eeprom
			;
			;    temp = minutes / 10; //Convert minutes into BCD
	MOVF  minutes,W
	MOVWF C14tmp
	CLRF  C15rem
	MOVLW .8
	MOVWF C13cnt
m075	RLF   C14tmp,1

⌨️ 快捷键说明

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