📄 rtc-demo.asm
字号:
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 + -