;**** includes **** 2011/1/15 ck=4Mhz .include "m88pdef.inc" .macro ldiw ; ldiw Z(X,Y),var ldi @0L,low(@1) ldi @0H,high(@1) .endm ;***************************** ;* レジスタ変数 設定 * ;***************************** .def c = r10 .def mem_l = r11 .def mem_h = r12 .def mem_p0 = r13 .def mem_add_w=R14 .def mem_add_r=R15 .def temp1 = r16 .def temp2 = r17 .def temp3 = r18 .def d0 = r19 .def h = r20 .def m = r21 .def s = r22 .def mode = r23 ;7bit alm on,1bit alm adj mode,0bit time adj mode .def ah = r24 .def am = r25 ;***************************** ;*  ビット 設定  * ;***************************** ;** PORTC *** ;.equ = 0 ;.equ = 1 ;.equ = 2 ;.equ = 3 ;.equ = 4 ;SDA ;.equ = 5 ;SCL ;.equ = 7 ;** PORTD *** ;.equ = 0 ;.equ = 1 .equ set_b = 2 .equ h_b = 3 .equ m_b = 4 ;.dseg .eseg ;EEPROM add rom_er: .byte 50*2 er_num: .db 0 .cseg rjmp RESET ;各種リセット reti ;rjmp EXT_INT0 ;外部割り込み要求0 reti ;rjmp EXT_INT1 ;外部割り込み要求1 reti ;rjmp PCINT0 ;ピン変化割り込み要求0 reti ;rjmp PCINT1 ;ピン変化割り込み要求1 rjmp PC_INT2 ;ピン変化割り込み要求2 reti ;rjmp WDT_OVF ;ウォッチドッグ計時完了 reti ;rjmp TIM2_COMPA ;タイマ/カウンタ2比較A一致 reti ;rjmp TIM2_COMPB ;タイマ/カウンタ2比較B一致 rjmp TIM2_OVF ;タイマ/カウンタ2溢れ reti ;rjmp TIM1_CAPT ;タイマ/カウンタ1捕獲発生 reti ;rjmp TIM1_COMPA ;タイマ/カウンタ1比較A一致 reti ;rjmp TIM1_COMPB ;タイマ/カウンタ1比較B一致 reti ;rjmp TIM1_OVF ;タイマ/カウンタ1溢れ reti ;rjmp TIM0_COMPA ;タイマ/カウンタ0比較A一致 reti ;rjmp TIM0_COMPB ;タイマ/カウンタ0比較B一致 rjmp TIM0_OVF ;タイマ/カウンタ0溢れ reti ;rjmp SPI_STC ;SPI転送完了 reti ;rjmp USART_RXC ;USART 受信完了 reti ;rjmp USART_UDRE ;USART 送信バッファ空 reti ;rjmp USART_TXC ;USART 送信完了 reti ;rjmp ADC_ ;ADC変換完了 reti ;rjmp EE_RDY ;EEPROM操作可 reti ;rjmp ANA_COMP ;アナログ比較器出力遷移 reti ;rjmp TWI ;2線直列インターフェース状態変化 reti ;rjmp SPM_RDY ;SPM命令操作可 RESET: ldi R16,HIGH(RAMEND) ;RAM最終アドレス上位を取得 out SPH,R16 ;スタック ポインタ上位を初期化 ldi R16,LOW(RAMEND) ;RAM最終アドレス下位を取得 out SPL,R16 ;スタック ポインタ下位を初期化 start: ldi r16,0x80 ;set cpu clk 4MHz sts CLKPR,r16 ldi r16,0x01 ;1/2 sts CLKPR,r16 ldi temp1,0 out DDRB,temp1 ldi temp1,0xff out PORTB,temp1 ldi temp1,0b00000000 out DDRC,temp1 ldi temp1,0b00001111 out PORTC,temp1 ldi temp1,0b01000000 out DDRD,temp1 ; pd0~5,7 in port,6=0ut oc0a ldi temp1,0b10111111; pd0~5,7 pull up out PORTD,temp1 ldi temp1,0b00000011 sts DIDR1,temp1 ldi temp1,0b00111111 sts DIDR0,temp1 cli ldi h,11 ldi m,59 ldi s,9 clr mode ldi ah,6 clr am dev_add: ldi r16,0b10100000 ;10100 A0P0W mov mem_add_w,r16 ldi r16,0b10100001 ;10100 A0P0R mov mem_add_r,r16 timer0_set: ldi temp1,(1<32Hz ldi temp1,191 ;割込(TOV2)周期 sts OCR2A,temp1 ;T=(1+TOP)/f2=192/32=6s ldi temp1,1< 0 sbic PCIFR,PCIF2 sbi PCIFR,PCIF2 ;PCIF2 1 -> 0 ret ad_al: sbrs mode,7 rjmp ad_al1 ldiw z,alm_on*2 rjmp ad_al2 ad_al1: ldiw z,alm_off*2 ad_al2: clr c clr r17 ldi d0,0x80 sei alm_out1: cpi r17,0xff brne alm_out1 alm_out2: cli ret wav_talk: ldi temp1,0 sts PCMSK2,temp1 ;pc_int禁止 sts TIMSK2,temp1 ;timer2 Overflow Interrupt Enable 保留 dumy_write: clr mem_p0 clr mem_h clr mem_l rcall twi_int rcall twi_start rcall SLA_W mov r16,mem_h rcall write_data mov r16,mem_l rcall write_data ldi temp1,1<