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

📄 rtc-demo.asm

📁 DS1307 RTC real time clock header file for atmel AT89X5X
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	RLF   C15rem,1
	MOVLW .10
	SUBWF C15rem,W
	BTFSS 0x03,Carry
	GOTO  m076
	MOVLW .10
	SUBWF C15rem,1
	BSF   0x03,Carry
m076	RLF   temp_3,1
	DECFSZ C13cnt,1
	GOTO  m075
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    minutes %= 10;
	MOVF  minutes,W
	MOVWF C17tmp
	CLRF  minutes
	MOVLW .8
	MOVWF C16cnt
m077	RLF   C17tmp,1
	RLF   minutes,1
	MOVLW .10
	SUBWF minutes,W
	BTFSS 0x03,Carry
	GOTO  m078
	MOVLW .10
	SUBWF minutes,1
m078	DECFSZ C16cnt,1
	GOTO  m077
			;    minutes = temp | minutes;
	MOVF  temp_3,W
	IORWF minutes,1
			;    write_eeprom(1, minutes); //Load minutes register
	MOVLW .1
	MOVWF address
	CLRF  address+1
	MOVF  minutes,W
	CALL  write_eeprom
			;
			;    /*
			;    Hour settings : 
			;    
			;    Bit # - Programmed Setting : Description
			;    7 - 0 : 
			;    6 - 1 : 12Hr or 24Hr Mode - High for AM/PM 12Hr. Mode
			;    5 - 1 : AM/PM bit - Set to PM
			;    4 - 0 : 
			;    
			;    3 - 1 : 
			;    2 - 0 :
			;    1 - 0 :
			;    0 - 0 : Set to 8 hours
			;    */
			;    temp = hours / 10; //Convert hours into BCD
	MOVF  hours,W
	MOVWF C19tmp
	CLRF  C20rem
	MOVLW .8
	MOVWF C18cnt
m079	RLF   C19tmp,1
	RLF   C20rem,1
	MOVLW .10
	SUBWF C20rem,W
	BTFSS 0x03,Carry
	GOTO  m080
	MOVLW .10
	SUBWF C20rem,1
	BSF   0x03,Carry
m080	RLF   temp_3,1
	DECFSZ C18cnt,1
	GOTO  m079
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    hours %= 10;
	MOVF  hours,W
	MOVWF C22tmp
	CLRF  hours
	MOVLW .8
	MOVWF C21cnt
m081	RLF   C22tmp,1
	RLF   hours,1
	MOVLW .10
	SUBWF hours,W
	BTFSS 0x03,Carry
	GOTO  m082
	MOVLW .10
	SUBWF hours,1
m082	DECFSZ C21cnt,1
	GOTO  m081
			;    hours = temp | hours;
	MOVF  temp_3,W
	IORWF hours,1
			;    hours |= 0b.0100.0000; //Force 12hr mode
	BSF   hours,6
			;    if(am_pm == PM) hours |= 0b.0010.0000; //Force AM/PM bit
	BTFSC 0x2B,am_pm
	BSF   hours,5
			;    if(am_pm == AM) hours &= 0b.1101.1111; //Force AM/PM bit
	BTFSS 0x2B,am_pm
	BCF   hours,5
			;    write_eeprom(2, hours); //Write hour configuration
	MOVLW .2
	MOVWF address
	CLRF  address+1
	MOVF  hours,W
	CALL  write_eeprom
			;    //=========================================================
			;
			;    //Date configuration
			;    //=========================================================
			;    cell = 1;
	MOVLW .1
	MOVWF cell
			;    uns8 day = 1, month = 1, date = 1, year = 4;
	MOVWF day
	MOVWF month
	MOVWF date
	MOVLW .4
	MOVWF year
			;
			;    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
			;
			;    while(1)
			;    {
			;        if(day == 1) printf("Sunday", 0);
m083	DECFSZ day,W
	GOTO  m084
	MOVLW .243
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 2) printf("Monday", 0);
m084	MOVF  day,W
	XORLW .2
	BTFSS 0x03,Zero_
	GOTO  m085
	MOVLW .250
	MOVWF nate_2
	CLRF  nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 3) printf("Tuesday", 0);
m085	MOVF  day,W
	XORLW .3
	BTFSS 0x03,Zero_
	GOTO  m086
	MOVLW .1
	MOVWF nate_2
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 4) printf("Wednesday", 0);
m086	MOVF  day,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m087
	MOVLW .9
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 5) printf("Thursday", 0);
m087	MOVF  day,W
	XORLW .5
	BTFSS 0x03,Zero_
	GOTO  m088
	MOVLW .19
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 6) printf("Friday", 0);
m088	MOVF  day,W
	XORLW .6
	BTFSS 0x03,Zero_
	GOTO  m089
	MOVLW .28
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(day == 7) printf("Saturday", 0);
m089	MOVF  day,W
	XORLW .7
	BTFSS 0x03,Zero_
	GOTO  m090
	MOVLW .35
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        
			;        putc(' ');
m090	MOVLW .32
	CALL  putc
			;    
			;        if(month == 1) printf("January", 0); 
	DECFSZ month,W
	GOTO  m091
	MOVLW .44
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 2) printf("February", 0); 
m091	MOVF  month,W
	XORLW .2
	BTFSS 0x03,Zero_
	GOTO  m092
	MOVLW .52
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 3) printf("March", 0); 
m092	MOVF  month,W
	XORLW .3
	BTFSS 0x03,Zero_
	GOTO  m093
	MOVLW .61
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 4) printf("April", 0); 
m093	MOVF  month,W
	XORLW .4
	BTFSS 0x03,Zero_
	GOTO  m094
	MOVLW .67
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 5) printf("May", 0); 
m094	MOVF  month,W
	XORLW .5
	BTFSS 0x03,Zero_
	GOTO  m095
	MOVLW .73
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 6) printf("June", 0); 
m095	MOVF  month,W
	XORLW .6
	BTFSS 0x03,Zero_
	GOTO  m096
	MOVLW .77
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 7) printf("July", 0); 
m096	MOVF  month,W
	XORLW .7
	BTFSS 0x03,Zero_
	GOTO  m097
	MOVLW .82
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 8) printf("August", 0); 
m097	MOVF  month,W
	XORLW .8
	BTFSS 0x03,Zero_
	GOTO  m098
	MOVLW .87
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 9) printf("September", 0); 
m098	MOVF  month,W
	XORLW .9
	BTFSS 0x03,Zero_
	GOTO  m099
	MOVLW .94
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 10) printf("October", 0); 
m099	MOVF  month,W
	XORLW .10
	BTFSS 0x03,Zero_
	GOTO  m100
	MOVLW .104
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 11) printf("November", 0); 
m100	MOVF  month,W
	XORLW .11
	BTFSS 0x03,Zero_
	GOTO  m101
	MOVLW .112
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        if(month == 12) printf("December", 0); 
m101	MOVF  month,W
	XORLW .12
	BTFSS 0x03,Zero_
	GOTO  m102
	MOVLW .121
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	CLRF  my_byte
	CLRF  my_byte+1
	CALL  printf
			;        
			;        printf(" %d,", date);
m102	MOVLW .130
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	MOVF  date,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;        
			;        printf(" 200%d    ", year);
	MOVLW .135
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	MOVF  year,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;        
			;        data_byte_in = getc();
	CALL  getc
	MOVWF data_byte_in
			;        if(data_byte_in == 'a' && cell > 1) cell--;
	XORLW .97
	BTFSS 0x03,Zero_
	GOTO  m103
	MOVLW .2
	SUBWF cell,W
	BTFSC 0x03,Carry
	DECF  cell,1
			;        if(data_byte_in == 's' && cell < 4) cell++;
m103	MOVF  data_byte_in,W
	XORLW .115
	BTFSS 0x03,Zero_
	GOTO  m104
	MOVLW .4
	SUBWF cell,W
	BTFSS 0x03,Carry
	INCF  cell,1
			;
			;        if(data_byte_in == '+')
m104	MOVF  data_byte_in,W
	XORLW .43
	BTFSS 0x03,Zero_
	GOTO  m105
			;        {
			;            if(cell == 1) day++;
	DECF  cell,W
	BTFSC 0x03,Zero_
	INCF  day,1
			;            if(cell == 2) month++;
	MOVF  cell,W
	XORLW .2
	BTFSC 0x03,Zero_
	INCF  month,1
			;            if(cell == 3) date++;
	MOVF  cell,W
	XORLW .3
	BTFSC 0x03,Zero_
	INCF  date,1
			;            if(cell == 4) year++;
	MOVF  cell,W
	XORLW .4
	BTFSC 0x03,Zero_
	INCF  year,1
			;        }
			;        if(data_byte_in == '-')
m105	MOVF  data_byte_in,W
	XORLW .45
	BTFSS 0x03,Zero_
	GOTO  m106
			;        {
			;            if(cell == 1) day--;
	DECF  cell,W
	BTFSC 0x03,Zero_
	DECF  day,1
			;            if(cell == 2) month--;
	MOVF  cell,W
	XORLW .2
	BTFSC 0x03,Zero_
	DECF  month,1
			;            if(cell == 3) date--;
	MOVF  cell,W
	XORLW .3
	BTFSC 0x03,Zero_
	DECF  date,1
			;            if(cell == 4) year--;
	MOVF  cell,W
	XORLW .4
	BTFSC 0x03,Zero_
	DECF  year,1
			;        }
			;        
			;        if(data_byte_in == 'p') break;
m106	MOVF  data_byte_in,W
	XORLW .112
	BTFSC 0x03,Zero_
	GOTO  m107
			;
			;        putc('\r');
	MOVLW .13
	CALL  putc
			;        
			;    }
	GOTO  m083
			;
			;    write_eeprom(3, day); //Load day register
m107	MOVLW .3
	MOVWF address
	CLRF  address+1
	MOVF  day,W
	CALL  write_eeprom
			;
			;    temp = month / 10; //Convert month into BCD
	MOVF  month,W
	MOVWF C24tmp
	CLRF  C25rem
	MOVLW .8
	MOVWF C23cnt
m108	RLF   C24tmp,1
	RLF   C25rem,1
	MOVLW .10
	SUBWF C25rem,W
	BTFSS 0x03,Carry
	GOTO  m109
	MOVLW .10
	SUBWF C25rem,1
	BSF   0x03,Carry
m109	RLF   temp_3,1
	DECFSZ C23cnt,1
	GOTO  m108
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    month %= 10;
	MOVF  month,W
	MOVWF C27tmp
	CLRF  month
	MOVLW .8
	MOVWF C26cnt
m110	RLF   C27tmp,1
	RLF   month,1
	MOVLW .10
	SUBWF month,W
	BTFSS 0x03,Carry
	GOTO  m111
	MOVLW .10
	SUBWF month,1
m111	DECFSZ C26cnt,1
	GOTO  m110
			;    month = temp | month;
	MOVF  temp_3,W
	IORWF month,1
			;    printf(" --%h-- ", month);
	MOVLW .146
	MOVWF nate_2
	MOVLW .1
	MOVWF nate_2+1
	MOVF  month,W
	MOVWF my_byte
	CLRF  my_byte+1
	CALL  printf
			;    write_eeprom(5, month); //Load month register
	MOVLW .5
	MOVWF address
	CLRF  address+1
	MOVF  month,W
	CALL  write_eeprom
			;
			;    temp = date / 10; //Convert date into BCD
	MOVF  date,W
	MOVWF C29tmp
	CLRF  C30rem
	MOVLW .8
	MOVWF C28cnt
m112	RLF   C29tmp,1
	RLF   C30rem,1
	MOVLW .10
	SUBWF C30rem,W
	BTFSS 0x03,Carry
	GOTO  m113
	MOVLW .10
	SUBWF C30rem,1
	BSF   0x03,Carry
m113	RLF   temp_3,1
	DECFSZ C28cnt,1
	GOTO  m112
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    date %= 10;
	MOVF  date,W
	MOVWF C32tmp
	CLRF  date
	MOVLW .8
	MOVWF C31cnt
m114	RLF   C32tmp,1
	RLF   date,1
	MOVLW .10
	SUBWF date,W
	BTFSS 0x03,Carry
	GOTO  m115
	MOVLW .10
	SUBWF date,1
m115	DECFSZ C31cnt,1
	GOTO  m114
			;    date = temp | date;
	MOVF  temp_3,W
	IORWF date,1
			;    write_eeprom(4, date); //Load date register
	MOVLW .4
	MOVWF address
	CLRF  address+1
	MOVF  date,W
	CALL  write_eeprom
			;
			;    temp = year / 10; //Convert year into BCD
	MOVF  year,W
	MOVWF C34tmp
	CLRF  C35rem
	MOVLW .8
	MOVWF C33cnt
m116	RLF   C34tmp,1
	RLF   C35rem,1
	MOVLW .10
	SUBWF C35rem,W
	BTFSS 0x03,Carry
	GOTO  m117
	MOVLW .10
	SUBWF C35rem,1
	BSF   0x03,Carry
m117	RLF   temp_3,1
	DECFSZ C33cnt,1
	GOTO  m116
			;    temp <<= 4;
	SWAPF temp_3,W
	ANDLW .240
	MOVWF temp_3
			;    year %= 10;
	MOVF  year,W
	MOVWF C37tmp
	CLRF  year
	MOVLW .8
	MOVWF C36cnt
m118	RLF   C37tmp,1
	RLF   year,1
	MOVLW .10
	SUBWF year,W
	BTFSS 0x03,Carry
	GOTO  m119
	MOVLW .10
	SUBWF year,1
m119	DECFSZ C36cnt,1
	GOTO  m118
			;    year = temp | year;
	MOVF  temp_3,W
	IORWF year,1
			;    write_eeprom(6, year); //Load year register
	MOVLW .6
	MOVWF address
	CLRF  address+1
	MOVF  year,W
	CALL  write_eeprom
			;    
			;    read_rtc(); //Print it out for double checking
	GOTO  read_rtc
			;
			;}
			;
			;void boot_up(void)
			;{
boot_up
			;    //Setup Ports
			;    ANSEL = 0b.0000.0000; //Turn off A/D
	CLRF  ANSEL
			;
			;    PORTA = 0b.0000.0000;
	BCF   0x03,RP0
	CLRF  PORTA
			;    TRISA = 0b.1111.1111;
	MOVLW .255
	BSF   0x03,RP0
	MOVWF TRISA
			;
			;    PORTB = 0b.0000.0000;
	BCF   0x03,RP0
	CLRF  PORTB
			;    TRISB = 0b.0000.0100;   //0 = Output, 1 = Input RX on RB2
	MOVLW .4
	BSF   0x03,RP0
	MOVWF TRISB
			;
			;    //Setup the hardware UART module
			;    //=============================================================
			;    //SPBRG = 51; //8MHz for 9600 inital communication baud rate
			;    SPBRG = 129; //20MHz for 9600 inital communication baud rate
	MOVLW .129
	MOVWF SPBRG
			;
			;    TXSTA = 0b.0010.0100; //8-bit asych mode, high speed uart enabled
	MOVLW .36
	MOVWF TXSTA
			;    RCSTA = 0b.1001.0000; //Serial port enable, 8-bit asych continous receive mode
	MOVLW .144
	BCF   0x03,RP0
	MOVWF RCSTA
			;    //=============================================================
			;
			;}
	RETURN

	END


; *** KEY INFO ***

; 0x01BF P0   16 word(s)  0 % : enable_uart_TX
; 0x01CF P0   19 word(s)  0 % : enable_uart_RX
; 0x01E2 P0    6 word(s)  0 % : putc
; 0x01E8 P0    4 word(s)  0 % : getc
; 0x01EC P0   21 word(s)  1 % : bin2Hex
; 0x0201 P0  207 word(s) 10 % : printf
; 0x0004 P0  237 word(s) 11 % : _const1
; 0x02F2 P0    5 word(s)  0 % : start
; 0x02F7 P0   15 word(s)  0 % : stop
; 0x0306 P0   26 word(s)  1 % : read_byte
; 0x0320 P0   28 word(s)  1 % : send_byte
; 0x02E0 P0   18 word(s)  0 % : read_eeprom
; 0x02D6 P0   10 word(s)  0 % : write_eeprom
; 0x02D0 P0    6 word(s)  0 % : ack_polling
; 0x07BF P0   19 word(s)  0 % : boot_up
; 0x0507 P0  696 word(s) 33 % : rtc_programming
; 0x0372 P0  405 word(s) 19 % : read_rtc
; 0x033C P0   54 word(s)  2 % : main

; RAM usage: 36 bytes (36 local), 332 bytes free
; Maximum call level: 4
;  Codepage 0 has 1999 word(s) :  97 %;  Codepage 1 has    0 word(s) :   0 %; Total of 1793 code words (43 %)

⌨️ 快捷键说明

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