搜索
bottom↓
回复: 13

LGT的RTC功能有没有用过的。88A上能用的程序328D上不能用

[复制链接]

出0入0汤圆

发表于 2015-11-14 23:49:58 | 显示全部楼层 |阅读模式
MEGA48的程序移植到8F88A上运行没问题,写入328D怎么都不运行。
程序怎么改都不行。时间晶振OSC2脚的电压接近电源电压3.3V,OSC1脚是0V。换了几个晶振都一样。
328D的RTC功能到底能不能用呀。

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

 楼主| 发表于 2015-11-15 00:00:45 | 显示全部楼层

手册上提到的这个SFIOR寄存器和PSR2位,只能在MEGA16的手册上找到。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2015-11-15 09:50:59 | 显示全部楼层
http://www.amobbs.com/thread-5628104-1-1.html
这个贴子里是自己用88A做的简易电源。下面一行的时间就是用RTC功能做的。
但是328D的RTC功能调几天了也没弄出来。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-11-15 23:35:53 来自手机 | 显示全部楼层
求大侠帮忙

出0入0汤圆

发表于 2015-11-16 14:28:24 | 显示全部楼层
在软件设置上, 328D和88A在外部OSC做TMR2输入上是一致的。
不同在于328D与88A中断向量是不同的, 88A的程序,
需要将目标器件设置为328后重新编译。请问是否有这方面的问题?

出0入0汤圆

 楼主| 发表于 2015-11-16 14:36:14 | 显示全部楼层
我用的是汇编。器件头文件是我自己根据手册改的。
LGT能不能提供汇编的器件头文件。
下面放上我改的328D的头文件。
#ifndef _328DDEF_INC_
#define _328DDEF_INC_

#pragma partinc 0

; ***** SPECIFY DEVICE ***************************************************
.device ATmega328
#pragma AVRPART ADMIN PART_NAME ATmega328
.equ        SIGNATURE_000        = 0x1e
.equ        SIGNATURE_001        = 0x93
.equ        SIGNATURE_002        = 0x0a

#pragma AVRPART CORE CORE_VERSION V2E

; ***** I/O REGISTER DEFINITIONS *****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions

;@@@@@@@@@@@@@@@@@ 8F88D PART START@@@@@@@@@@@@@@@@@@@@
/* GUID 全局设备号*/
.EQU        GUID3        = 0xf6        ;
.EQU        GUID2        = 0xf5        ;
.EQU        GUID1        = 0xf4        ;
.EQU        GUID0        = 0xf3        ;

/* PMCR        时钟源管理寄存器  */
.EQU        PMCR        = 0xf2        ;
.EQU        RC32MEN        = 0        ; 内部 32MHz RC 振荡器使能控制,1 使能,0 禁止
.EQU        RC32KEN        = 1        ; 内部 32KHz RC 振荡器使能控制,1 使能,0 禁止
.EQU        OSCMEN        = 2        ; 外部高频晶振使能控制,1 使能,0 禁止
.EQU        OSCKEN        = 3        ; 外部低频晶振使能控制,1 使能,0 禁止
.EQU        WCLKS        = 4        ; WDT 时钟源选择
.EQU        CLKSS        = 5        ; 主时钟源选择控制
.EQU        CLKFS        = 6        ; 主时钟源频率控制
.EQU        PMCE        = 7        ; PMCR 寄存器更改使能控制位

/*IOCR 特殊功能控制寄存器*/
.EQU        IOCR        = 0XF0
.EQU        EXIOEN        = 0        ; PC6 引脚默认为复位功能,设置此位为 1 将禁止外部复位功能
                        ; 复位功能禁止后,PC6 可作为一个普通的 I/O 使用
.EQU        RVIOEN         = 1        ; VREF引脚默认为模拟输入功能
                        ; 设置此位为1,将关闭模拟输入功能,这个引脚可以作为PE6使用
.EQU        IOCE        = 7        ; IOCR值改变使能位

.EQU        PMXCR        = 0XEE
.EQU        OC0C0        = 3        ;
.EQU        SSB1        = 2        ;
.EQU        TDD6        = 1         ;
.EQU        RDD5        = 0        ;

.EQU        TKCSR        = $EC        ;
.EQU        F2XEN        = 6        ;
.EQU        TC2XF1        = 5        ;
.EQU        TC2XF0        = 4        ;
.EQU        AFCKS        = 2        ;
.EQU        TC2XS1        = 1        ;
.EQU        TC2XS0        = 0        ;

/*PSSR 预分频器选择寄存器 */
.EQU        PSSR        = 0XE2
.EQU        PSR1        = 0        ; 预分频器 CPS1 复位控制位
.EQU        PSS1        = 7        ; 预分频器选择控制位

/*DIDR3 数字输入禁用寄存器3*/
.EQU        LDOCR        = 0XCF
.EQU        WEN        = 7        ;
.EQU        PDEN         = 3        ;
.EQU        VSEL2        = 2        ;
.EQU        VSEL1        = 1        ;
.EQU        VSEL0        = 0        ;       

/*DIDR2 数字输入禁用寄存器2*/
.EQU        VCAL2        = 0XCE        ;

.EQU        VCAL1        = 0XCD        ;

.EQU        VCAL        = 0XC8        ;

;@@@@@@@@@@@@@@@@@ LGT8F88D PART END @@@@@@@@@@@@@@@@@@@@@@
.equ        UDR        = 0xc6        ; MEMORY MAPPED
; UDR - USART 数据寄存器
.equ        UDR1_0        = 0        ; USART 发送和接收的数据
.equ        UDR1_1        = 1        ;
.equ        UDR1_2        = 2        ;
.equ        UDR1_3        = 3        ;
.equ        UDR1_4        = 4        ;
.equ        UDR1_5        = 5        ;
.equ        UDR1_6        = 6        ;
.equ        UDR1_7        = 7        ;

.equ        UBRRL        = 0xc4        ; MEMORY MAPPED
; UBRRL - USART 波特率寄存器低字节
.equ        UBRR0        = 0        ; USART 波特率寄存器的低字节部分
.equ        UBRR1        = 1        ;
.equ        UBRR2        = 2        ;
.equ        UBRR3        = 3        ;
.equ        UBRR4        = 4        ;
.equ        UBRR5        = 5        ;
.equ        UBRR6        = 6        ;
.equ        UBRR7        = 7        ;

.equ        UBRRH        = 0xc5        ; MEMORY MAPPED
; UBRRH - USART 波特率寄存器高字节
.equ        UBRR8        = 0        ; USART 波特率寄存器的高字节部分
.equ        UBRR9        = 1        ;
.equ        UBRR10        = 2        ;
.equ        UBRR11        = 3        ;

.equ        UCSRC        = 0xc2        ; MEMORY MAPPED
; UCSRC - USART 控制和状态寄存器 C
.equ        UCPOL        = 0        ; 时钟极性选择位
.equ        UCSZ0        = 1        ; 字符长度控制位0
.equ        UCSZ1        = 2        ; 字符长度控制位1
.equ        USBS        = 3        ; 停止位选择位
.equ        UPM0        = 4        ; 奇偶校验模式选择位
.equ        UPM1        = 5        ;
.equ        UMSEL0        = 6        ; USART 模式选择位
.equ        UMSEL1        = 7        ;

.equ        UCSRB        = 0xc1        ; MEMORY MAPPED
; UCSRB - USART 控制和状态寄存器 B
.equ        TXB8        = 0        ; 发送数据第 8 位
.equ        RXB8        = 1        ; 接收数据第 8 位
.equ        UCSZ2        = 2        ; 字符长度控制位2
.equ        TXEN        = 3        ; 发送使能位
.equ        RXEN        = 4        ; 接收使能位
.equ        UDRIE        = 5        ; 数据寄存器空中断使能位
.equ        TXCIE        = 6        ; 发送结束中断使能位
.equ        RXCIE        = 7        ; 接收结束中断使能位

.equ        UCSRA        = 0xc0        ; MEMORY MAPPED
; UCSRA - USART 控制和状态寄存器 A
.equ        MPCM        = 0        ; 多处理器通信模式使能位
.equ        U2X        = 1        ; 倍速发送使能位
.equ        UPE        = 2        ; 奇偶校验错误标志位
.equ        DOR        = 3        ; 数据溢出标志位
.equ        FE        = 4        ; 帧错误标志位
.equ        UDRE        = 5        ; 数据寄存器空标志位
.equ        TXC        = 6        ; 发送结束标志位
.equ        RXC        = 7        ; 接收结束标志位

.equ        TWAMR        = 0xbd        ; MEMORY MAPPED
; TWAMR -  TWI 地址屏蔽寄存器
.equ        TWAM0        = 1        ; TWI 地址屏蔽控制位
.equ        TWAM1        = 2        ;
.equ        TWAM2        = 3        ;
.equ        TWAM3        = 4        ;
.equ        TWAM4        = 5        ;
.equ        TWAM5        = 6        ;
.equ        TWAM6        = 7        ;

.equ        TWCR        = 0xbc        ; MEMORY MAPPED
; TWCR - TWI 控制寄存器
.equ        TWIE        = 0        ; TWI 中断使能控制位
.equ        TWEN        = 2        ; TWI 使能控制位
.equ        TWWC        = 3        ; TWI 写冲突标志位
.equ        TWSTO        = 4        ; TWI 停止状态控制位
.equ        TWSTA        = 5        ; TWI 起始状态控制位
.equ        TWEA        = 6        ; TWI 使能应答控制位
.equ        TWINT        = 7        ; TWI 中断标志位

.equ        TWDR        = 0xbb        ; MEMORY MAPPED
; TWDR - TWI 数据寄存器
.equ        TWD0        = 0        ; TWI 数据寄存器
.equ        TWD1        = 1        ;
.equ        TWD2        = 2        ;
.equ        TWD3        = 3        ;
.equ        TWD4        = 4        ;
.equ        TWD5        = 5        ;
.equ        TWD6        = 6        ;
.equ        TWD7        = 7        ;

.equ        TWAR        = 0xba        ; MEMORY MAPPED
; TWAR - TWI 地址寄存器
.equ        TWGCE        = 0        ; TWI 广播识别使能控制位
.equ        TWA0        = 1        ; TWI 从机地址位
.equ        TWA1        = 2        ;
.equ        TWA2        = 3        ;
.equ        TWA3        = 4        ;
.equ        TWA4        = 5        ;
.equ        TWA5        = 6        ;
.equ        TWA6        = 7        ;

.equ        TWSR        = 0xb9        ; MEMORY MAPPED
; TWSR -  TWI 状态寄存器
.equ        TWPS0        = 0        ; TWI 预分频控制低位0
.equ        TWPS1        = 1        ; TWI 预分频控制低位1
.equ        TWS3        = 3        ; TWI 状态标志位
.equ        TWS4        = 4        ;
.equ        TWS5        = 5        ;
.equ        TWS6        = 6        ;
.equ        TWS7        = 7        ;

.equ        TWBR        = 0xb8        ; MEMORY MAPPED
; TWBR - TWI 比特率寄存器
.equ        TWBR0        = 0        ; TWI 比特率选择控制位
.equ        TWBR1        = 1        ;
.equ        TWBR2        = 2        ;
.equ        TWBR3        = 3        ;
.equ        TWBR4        = 4        ;
.equ        TWBR5        = 5        ;
.equ        TWBR6        = 6        ;
.equ        TWBR7        = 7        ;

.equ        ASSR        = 0xb6        ; MEMORY MAPPED
.equ        TCR2BUB        = 0        ;
.equ        TCR2AUB        = 1        ;
.equ        OCR2BUB        = 2        ;
.equ        OCR2AUB        = 3        ;
.equ        TCN2UB        = 4        ;
.equ        AS2        = 5        ;
.equ        EXCLK        = 6        ;

.equ        OCR2B        = 0xb4        ; MEMORY MAPPED
; OCR2B - Timer/Counter2 Output Compare Register B
.equ        OCR2B0        = 0        ; Timer/Counter2 Output Compare Register Bit 0
.equ        OCR2B1        = 1        ; Timer/Counter2 Output Compare Register Bit 1
.equ        OCR2B2        = 2        ; Timer/Counter2 Output Compare Register Bit 2
.equ        OCR2B3        = 3        ; Timer/Counter2 Output Compare Register Bit 3
.equ        OCR2B4        = 4        ; Timer/Counter2 Output Compare Register Bit 4
.equ        OCR2B5        = 5        ; Timer/Counter2 Output Compare Register Bit 5
.equ        OCR2B6        = 6        ; Timer/Counter2 Output Compare Register Bit 6
.equ        OCR2B7        = 7        ; Timer/Counter2 Output Compare Register Bit 7

.equ        OCR2A        = 0xb3        ; MEMORY MAPPED
; OCR2A - Timer/Counter2 Output Compare Register A
.equ        OCR2A0        = 0        ; Timer/Counter2 Output Compare Register Bit 0
.equ        OCR2A1        = 1        ; Timer/Counter2 Output Compare Register Bit 1
.equ        OCR2A2        = 2        ; Timer/Counter2 Output Compare Register Bit 2
.equ        OCR2A3        = 3        ; Timer/Counter2 Output Compare Register Bit 3
.equ        OCR2A4        = 4        ; Timer/Counter2 Output Compare Register Bit 4
.equ        OCR2A5        = 5        ; Timer/Counter2 Output Compare Register Bit 5
.equ        OCR2A6        = 6        ; Timer/Counter2 Output Compare Register Bit 6
.equ        OCR2A7        = 7        ; Timer/Counter2 Output Compare Register Bit 7

.equ        TCNT2        = 0xb2        ; MEMORY MAPPED
; TCNT2 - Timer/Counter2
.equ        TCNT20        = 0        ; Timer/Counter 2 bit 0
.equ        TCNT21        = 1        ; Timer/Counter 2 bit 1
.equ        TCNT22        = 2        ; Timer/Counter 2 bit 2
.equ        TCNT23        = 3        ; Timer/Counter 2 bit 3
.equ        TCNT24        = 4        ; Timer/Counter 2 bit 4
.equ        TCNT25        = 5        ; Timer/Counter 2 bit 5
.equ        TCNT26        = 6        ; Timer/Counter 2 bit 6
.equ        TCNT27        = 7        ; Timer/Counter 2 bit 7

.equ        TCCR2B        = 0xb1        ; MEMORY MAPPED
; TCCR2B - Timer/Counter2 Control Register B
.equ        CS20        = 0        ; Clock Select bit 0
.equ        CS21        = 1        ; Clock Select bit 1
.equ        CS22        = 2        ; Clock Select bit 2
.equ        WGM22        = 3        ; Waveform Generation Mode
.equ        FOC2B        = 6        ; Force Output Compare B
.equ        FOC2A        = 7        ; Force Output Compare A

.equ        TCCR2A        = 0xb0        ; MEMORY MAPPED
; TCCR2A - Timer/Counter2 Control Register A
.equ        WGM20        = 0        ; Waveform Genration Mode
.equ        WGM21        = 1        ; Waveform Genration Mode
.equ        COM2B0        = 4        ; Compare Output Mode bit 0
.equ        COM2B1        = 5        ; Compare Output Mode bit 1
.equ        COM2A0        = 6        ; Compare Output Mode bit 1
.equ        COM2A1        = 7        ; Compare Output Mode bit 1

.equ        PORTE        = 0xa9        ; MEMORY MAPPED
; PORTE - Port E Data Register
.equ        PORTE0        = 0        ; Port E Data Register bit 0
.equ        PE0        = 0        ; For compatibility
.equ        PORTE1        = 1        ; Port E Data Register bit 1
.equ        PE1        = 1        ; For compatibility
.equ        PORTE2        = 2        ; Port E Data Register bit 2
.equ        PE2        = 2        ; For compatibility
.equ        PORTE3        = 3        ; Port E Data Register bit 3
.equ        PE3        = 3        ; For compatibility
.equ        PORTE4        = 4        ; Port E Data Register bit 4
.equ        PE4        = 4        ; For compatibility
.equ        PORTE5        = 5        ; Port E Data Register bit 5
.equ        PE5        = 5        ; For compatibility
.equ        PORTE6        = 6        ; Port E Data Register bit 6
.equ        PE6        = 6        ; For compatibility
.equ        PORTE7        = 7        ; Port E Data Register bit 7
.equ        PE7        = 7        ; For compatibility

.equ        DDRE        = 0xa8        ; MEMORY MAPPED
; DDRE - Port E Data Direction Register
.equ        DDE0        = 0        ; Port E Data Direction Register bit 0
.equ        DDE1        = 1        ; Port E Data Direction Register bit 1
.equ        DDE2        = 2        ; Port E Data Direction Register bit 2
.equ        DDE3        = 3        ; Port E Data Direction Register bit 3
.equ        DDE4        = 4        ; Port E Data Direction Register bit 4
.equ        DDE5        = 5        ; Port E Data Direction Register bit 5
.equ        DDE6        = 6        ; Port E Data Direction Register bit 6
.equ        DDE7        = 7        ; Port E Data Direction Register bit 7

.equ        PINE        = 0xa7        ; MEMORY MAPPED
; PINE - Port E Input Pins
.equ        PINE0        = 0        ; Port E Input Pins bit 0
.equ        PINE1        = 1        ; Port E Input Pins bit 1
.equ        PINE2        = 2        ; Port E Input Pins bit 2
.equ        PINE3        = 3        ; Port E Input Pins bit 3
.equ        PINE4        = 4        ; Port E Input Pins bit 4
.equ        PINE5        = 5        ; Port E Input Pins bit 5
.equ        PINE6        = 6        ; Port E Input Pins bit 6
.equ        PINE7        = 7        ; Port E Input Pins bit 7


.equ        OCR1BL        = 0x8a        ; MEMORY MAPPED

.equ        OCR1BH        = 0x8b        ; MEMORY MAPPED

.equ        OCR1AL        = 0x88        ; MEMORY MAPPED

.equ        OCR1AH        = 0x89        ; MEMORY MAPPED

.equ        ICR1L        = 0x86        ; MEMORY MAPPED

.equ        ICR1H        = 0x87        ; MEMORY MAPPED

.equ        TCNT1L        = 0x84        ; MEMORY MAPPED

.equ        TCNT1H        = 0x85        ; MEMORY MAPPED

.equ        TCCR1C        = 0x82        ; MEMORY MAPPED
; TCCR1C - Timer/Counter1 Control Register C
.equ        FOC1B        = 6        ; 强制输出比较 B
.equ        FOC1A        = 7        ; 强制输出比较 A

.equ        TCCR1B        = 0x81        ; MEMORY MAPPED
; TCCR1B - Timer/Counter1 Control Register B
.equ        CS10        = 0        ; Clock Select bit 0
.equ        CS11        = 1        ; Clock Select 1 bit 1
.equ        CS12        = 2        ; Clock Select1 bit 2
.equ        WGM12        = 3        ; Waveform Generation Mode Bit 2
.equ        WGM13        = 4        ; Waveform Generation Mode Bit 3
.equ        ICES1        = 6        ; Input Capture 1 Edge Select
.equ        ICNC1        = 7        ; Input Capture 1 Noise Canceler

.equ        TCCR1A        = 0x80        ; MEMORY MAPPED
; TCCR1A - Timer/Counter1 Control Register A
.equ        WGM10        = 0        ; 波形产生模式控制位0
.equ        WGM11        = 1        ; 波形产生模式控制位1
.equ        COM1B0        = 4        ; Comparet Ouput Mode 1B, bit 0
.equ        COM1B1        = 5        ; Compare Output Mode 1B, bit 1
.equ        COM1A0        = 6        ; Comparet Ouput Mode 1A, bit 0
.equ        COM1A1        = 7        ; Compare Output Mode 1A, bit 1

.equ        DIDR1        = 0x7f        ; MEMORY MAPPED
; DIDR1 - Digital Input Disable Register 1
.equ        AIN0D        = 0        ; AIN0 Digital Input Disable
.equ        AIN1D        = 1        ; AIN1 Digital Input Disable
.equ        AIN2D        = 2        ; AIN2 Digital Input Disable
.equ        AIN3D        = 3        ; AIN3 Digital Input Disable
.equ        OPA0D        = 4        ; OPA0 Digital Input Disable
.equ        OPA1D        = 5        ; OPA1 Digital Input Disable
.equ        OPA2D        = 6        ; OPA2 Digital Input Disable
.equ        OPA3D        = 7        ; OPA3 Digital Input Disable

.equ        DIDR0        = 0x7e        ; MEMORY MAPPED
; DIDR0 - Digital Input Disable Register
.equ        ADC0D        = 0        ;
.equ        ADC1D        = 1        ;
.equ        ADC2D        = 2        ;
.equ        ADC3D        = 3        ;
.equ        ADC4D        = 4        ;
.equ        ADC5D        = 5        ;
.equ        ADC6D        = 6        ;
.equ        ADC7D        = 7        ;

.equ        ADTMR        = 0x7d        ; MEMORY MAPPED
/* ADTMR  ADC模式控制寄存器  */
.EQU          ADCTM        = 0        ; ADC 测试模式选择控制位,用户设置 ADTM 位为001即可

.equ        ADMUX        = 0x7c        ; MEMORY MAPPED
; ADMUX -  ADC 多路选择控制寄存器
.equ        CHMUX0        = 0        ; ADC 输入源选择控制位0
.equ        CHMUX1        = 1        ; ADC 输入源选择控制位1
.equ        CHMUX2        = 2        ; ADC 输入源选择控制位2
.equ        CHMUX3        = 3        ; ADC 输入源选择控制位3
.equ        ADLAR        = 5        ; 转换结果左对齐使能控制位
.equ        REFS0        = 6        ; 参考电压选择控制位0
.equ        REFS1        = 7        ; 参考电压选择控制位1

.equ        ADCSRB        = 0x7b        ; MEMORY MAPPED
; ADCSRB - The ADC Control and Status register B
.equ        ADTS0        = 0        ; ADC 自动触发源选择控制位0
.equ        ADTS1        = 1        ; ADC 自动触发源选择控制位1
.equ        ADTS2        = 2        ; ADC 自动触发源选择控制位2
.equ        ICTL        = 4        ; 温度传感器模式选择控制位
.equ        ACME        = 6        ; 模拟比较器多路复用器使能控制位

.equ        ADCSRA        = 0x7a        ; MEMORY MAPPED
; ADCSRA - The ADC Control and Status register A
.equ        ADPS0        = 0        ; ADC  Prescaler Select Bits
.equ        ADPS1        = 1        ; ADC  Prescaler Select Bits
.equ        ADPS2        = 2        ; ADC  Prescaler Select Bits
.equ        ADIE        = 3        ; ADC Interrupt Enable
.equ        ADIF        = 4        ; ADC Interrupt Flag
.equ        ADATE        = 5        ; ADC  Auto Trigger Enable
.equ        ADSC        = 6        ; ADC Start Conversion
.equ        ADEN        = 7        ; ADC Enable

.equ        ADCH        = 0x79        ; MEMORY MAPPED
; ADCH - ADC Data Register High Byte
.equ        ADC8        = 0        ; ADC Data Register High Byte Bit 0
.equ        ADC9        = 1        ; ADC Data Register High Byte Bit 1
.equ        ADC10        = 2        ; ADC Data Register High Byte Bit 0
.equ        ADC11        = 3        ; ADC Data Register High Byte Bit 1

.equ        ADCL        = 0x78        ; MEMORY MAPPED
; ADCL - ADC Data Register Low Byte
.equ        ADC0        = 0        ; ADC Data Register Low Byte Bit 0
.equ        ADC1        = 1        ; ADC Data Register Low Byte Bit 1
.equ        ADC2        = 2        ; ADC Data Register Low Byte Bit 2
.equ        ADC3        = 3        ; ADC Data Register Low Byte Bit 3
.equ        ADC4        = 4        ; ADC Data Register Low Byte Bit 4
.equ        ADC5        = 5        ; ADC Data Register Low Byte Bit 5
.equ        ADC6        = 6        ; ADC Data Register Low Byte Bit 6
.equ        ADC7        = 7        ; ADC Data Register Low Byte Bit 7

.equ        IVBASE        = 0x75        ; MEMORY MAPPED

.equ        PCMSK3        = 0x73        ; MEMORY MAPPED
; PCMSK3 - Pin Change Mask Register 3
.equ        PCINT24        = 0        ; Pin Change Enable Mask 24
.equ        PCINT25        = 1        ; Pin Change Enable Mask 25
.equ        PCINT26        = 2        ; Pin Change Enable Mask 26
.equ        PCINT27        = 3        ; Pin Change Enable Mask 27
.equ        PCINT28        = 4        ; Pin Change Enable Mask 28
.equ        PCINT29        = 5        ; Pin Change Enable Mask 29
.equ        PCINT30        = 6        ; Pin Change Enable Mask 30

.equ        TIMSK2        = 0x70        ; MEMORY MAPPED
; ***** TIMER_COUNTER_2 **************
; TIMSK2 - Timer/Counter Interrupt Mask register
.equ        TOIE2        = 0        ; Timer/Counter2 Overflow Interrupt Enable
.equ        OCIE2A        = 1        ; Timer/Counter2 Output Compare Match A Interrupt Enable
.equ        OCIE2B        = 2        ; Timer/Counter2 Output Compare Match B Interrupt Enable

.equ        TIMSK1        = 0x6f        ; MEMORY MAPPED
; TIMSK1 - Timer/Counter1 Interrupt Mask Register
.equ        TOIE1        = 0        ; Timer/Counter1 Overflow Interrupt Enable
.equ        OCIE1A        = 1        ; Timer/Counter1 Output Compare A Match Interrupt Enable
.equ        OCIE1B        = 2        ; Timer/Counter1 Output Compare B Match Interrupt Enable
.equ        TICIE1        = 5        ; Timer/Counter1 Input Capture Interrupt Enable

.equ        TIMSK0        = 0x6e        ; MEMORY MAPPED
; ***** TIMER_COUNTER_0 **************
; TIMSK0 - Timer/Counter0 Interrupt Mask Register
.equ        TOIE0        = 0        ; TC0 溢出中断使能位
.equ        OCIE0A        = 1        ; TC0 输出比较 A匹配中断使能位
.equ        OCIE0B        = 2        ; TC0 输出比较 B 匹配中断使能位

.equ        PCMSK2        = 0x6d        ; MEMORY MAPPED
; PCMSK2 - Pin Change Mask Register 2
.equ        PCINT16        = 0        ; Pin Change Enable Mask 16
.equ        PCINT17        = 1        ; Pin Change Enable Mask 17
.equ        PCINT18        = 2        ; Pin Change Enable Mask 18
.equ        PCINT19        = 3        ; Pin Change Enable Mask 19
.equ        PCINT20        = 4        ; Pin Change Enable Mask 20
.equ        PCINT21        = 5        ; Pin Change Enable Mask 21
.equ        PCINT22        = 6        ; Pin Change Enable Mask 22
.equ        PCINT23        = 7        ; Pin Change Enable Mask 23

.equ        PCMSK1        = 0x6c        ; MEMORY MAPPED
; PCMSK1 - Pin Change Mask Register 1
.equ        PCINT8        = 0        ; Pin Change Enable Mask 8
.equ        PCINT9        = 1        ; Pin Change Enable Mask 9
.equ        PCINT10        = 2        ; Pin Change Enable Mask 10
.equ        PCINT11        = 3        ; Pin Change Enable Mask 11
.equ        PCINT12        = 4        ; Pin Change Enable Mask 12
.equ        PCINT13        = 5        ; Pin Change Enable Mask 13
.equ        PCINT14        = 6        ; Pin Change Enable Mask 14

.equ        PCMSK0        = 0x6b        ; MEMORY MAPPED
; PCMSK0 - Pin Change Mask Register 0
.equ        PCINT0        = 0        ; Pin Change Enable Mask 0
.equ        PCINT1        = 1        ; Pin Change Enable Mask 1
.equ        PCINT2        = 2        ; Pin Change Enable Mask 2
.equ        PCINT3        = 3        ; Pin Change Enable Mask 3
.equ        PCINT4        = 4        ; Pin Change Enable Mask 4
.equ        PCINT5        = 5        ; Pin Change Enable Mask 5
.equ        PCINT6        = 6        ; Pin Change Enable Mask 6
.equ        PCINT7        = 7        ; Pin Change Enable Mask 7

.equ        EICRA        = 0x69        ; MEMORY MAPPED
; EICRA - External Interrupt Control Register A
.equ        ISC00        = 0        ; INT0 引脚中断触发方式控制位低位
.equ        ISC01        = 1        ; INT0 引脚中断触发方式控制位高位
.equ        ISC10        = 2        ; INT1 引脚中断触发方式控制位低位
.equ        ISC11        = 3        ; INT1 引脚中断触发方式控制位高位

.equ        PCICR        = 0x68        ; MEMORY MAPPED
; PCICR - Pin Change Interrupt Control Register
.equ        PCIE0        = 0        ; Pin Change Interrupt Enable 0
.equ        PCIE1        = 1        ; Pin Change Interrupt Enable 1
.equ        PCIE2        = 2        ; Pin Change Interrupt Enable 2
.equ        PCIE3        = 3        ; Pin Change Interrupt Enable 3

.equ        OSCCAL        = 0x66        ; MEMORY MAPPED

.equ        PRR1        = 0x65        ; MEMORY MAPPED
; PRR1 - 省电控制寄存器0
.equ        PRPCI        = 1        ; 设置为 1,关闭外部引脚变化以及外部中断模块工作时钟
.equ        PREFL        = 2        ; 设置为 1,关闭 FLASH 控制器接口时序时钟
.equ        PRWDT        = 5        ; 设置为 1,关闭 WDT 计数器时钟

.equ        PRR        = 0x64        ; MEMORY MAPPED
; PRR - 省电控制寄存器
.equ        PRADC        = 0        ; 设置为 1,关闭 ADC 控制器时钟
.equ        PRUSART0= 1        ; 设置为 1,关闭 USART0 模块的时钟
.equ        PRSPI        = 2        ; 设置为 1,关闭 SPI 模块的时钟
.equ        PRTIM1        = 3        ; 设置为 1,关闭定时/计数器 1的时钟
.equ        PRTIM0        = 5        ; 设置为 1,关闭定时/计数器 0的时钟
.equ        PRTIM2        = 6        ; 设置为 1,关闭定时/计数器 2的时钟
.equ        PRTWI        = 7        ; 设置为 1,关闭 TWI 模块的时钟

.equ        VDTCR        = 0x62        ; MEMORY MAPPED

.equ        CLKPR        = 0x61        ; MEMORY MAPPED
; CLKPR - 主时钟预分频寄存器
.EQU        CLKPS0        = 0        ; 时钟预分频选择位
.EQU        CLKPS1        = 1        ;
.EQU        CLKPS2        = 2        ;
.EQU        CLKPS3        = 3        ;
.EQU        CLKOEN0        = 5        ; 设置系统时钟是否在 PB0 引脚上输出
.EQU        CLKOEN1        = 6        ; 设置系统时钟是否在 PE5 引脚上输出
.EQU        CLKPCE        = 7        ; 时钟预分频更改时钟控制

.equ        WDTCSR        = 0x60        ; MEMORY MAPPED
; WDTCSR - Watchdog Timer Control Register
.equ        WDP0        = 0        ; WDT 预分频因子选择控制0
.equ        WDP1        = 1        ; WDT 预分频因子选择控制1
.equ        WDP2        = 2        ; WDT 预分频因子选择控制2
.equ        WDE        = 3        ; WDT 使能控制位
.equ        WDTOE        = 4        ; WDT 关闭使能控制位
.equ        WDP3        = 5        ; WDT 预分频因子选择控制3
.equ        WDIE        = 6        ; WDT 中断使能控制位
.equ        WDIF        = 7        ; WDT 中断标志位


.equ        SREG        = 0x3f
; SREG - 系统状态寄存器
.equ        SREG_C        = 0        ; 进位标志,表示算术或逻辑操作导致了进位
.equ        SREG_Z        = 1        ; 零标志,表示算术或逻辑运算的结果为零
.equ        SREG_N        = 2        ; 负标志,表示算术或逻辑运算产生了一个负数
.equ        SREG_V        = 3        ; 溢出标志,表示二进制补码运算结果产生溢出
.equ        SREG_S        = 4        ; S符号位,等效于 N与 V 的异或运算结果
.equ        SREG_H        = 5        ; 半进位标志,在 BCD 运算中有用,表示字节运算产生了的半进位
.equ        SREG_T        = 6        ; 临时位,位复制(BLD)和位存储(BST)指令中使用
.equ        SREG_I        = 7        ; 全局中断使能位

.equ        SPH        = 0x3e

.equ        SPL        = 0x3d

.equ        OP0TCNT        = 0x3a

.equ        OP0CRB        = 0x39

.equ        OP0CRA        = 0x38

.equ        ECCR        = 0x36

.equ        MCUCR        = 0x35
; MCUCR MCU 控制寄存器
.equ        IVCE        = 0        ; 中断向量选择更改使能位
.equ        IVSEL        = 1        ; 中断向量选择位
.equ        PUD        = 4        ; 全局上拉禁止位
.equ        FPDEN        = 6        ; FLASH POWER DOWN使能控制
.equ        FWKPEN        = 7        ; 快速唤醒模式使能控制

.equ        MCUSR        = 0x34
/* MCUSR  MCU  IO 特殊功能控制寄存器  */
.EQU        PORF        = 0        ; 上电复位标志,写 0 清零
.EQU        EXTRF        = 1        ; 外部复位标志,上电复位自动清零,或写 0 清零
.EQU        BORF        = 2        ; 低电压检测复位,上电复位自动清零,或写 0 清零
.EQU        WDRF        = 3        ; 看门狗复位标志,上电复位自动清零,或写 0 清零
.EQU        OCDRF        = 4        ; OCD 调试器复位标志,上电复位自动清零,或写 0 清零
.EQU        PDRF        = 5        ; 从POWER OFF模式唤醒标志
.EQU        SWDD        = 7        ; SWD 接口禁止位。写 1 将关闭 SWD 接口

.equ        SMCR        = 0x33
; SMCR - 休眠模式控制寄存器
.equ        SE        = 0        ; 休眠模式使能控制位
.equ        SM0        = 1        ; 休眠模式选择
.equ        SM1        = 2        ;
.equ        SM2        = 3        ;

.equ        DAL0        = 0x32

.equ        AFTCNT0        = 0x31

.equ        AC0SR        = 0x30
; ACSR - Analog Comparator Control And Status Register
.equ        ACIS0        = 0        ; Analog Comparator Interrupt Mode Select bit 0
.equ        ACIS1        = 1        ; Analog Comparator Interrupt Mode Select bit 1
.equ        ACIC        = 2        ; Analog Comparator Input Capture Enable
.equ        ACIE        = 3        ; Analog Comparator Interrupt Enable
.equ        ACI        = 4        ; Analog Comparator Interrupt Flag
.equ        ACO        = 5        ; Analog Compare Output
.equ        ACBG        = 6        ; Analog Comparator Bandgap Select
.equ        ACD        = 7        ; Analog Comparator Disable

.equ        SPDR        = 0x2e
; SPDR - SPI 数据寄存器
.equ        SPDRB0        = 0        ; SPI 发送和接收的数据
.equ        SPDRB1        = 1        ;
.equ        SPDRB2        = 2        ;
.equ        SPDRB3        = 3        ;
.equ        SPDRB4        = 4        ;
.equ        SPDRB5        = 5        ;
.equ        SPDRB6        = 6        ;
.equ        SPDRB7        = 7        ;

.equ        SPSR        = 0x2d
; SPSR - SPI 状态寄存器
.equ        SPI2X        = 0        ; SPI 倍速控制位
.equ        dual        = 2        ; 双线模式控制位
.equ        WCOL        = 6        ; 写冲突标志位
.equ        SPIF        = 7        ; SPI 中断标志位

.equ        SPCR        = 0x2c
; SPCR - SPI 控制寄存器
.equ        SPR0        = 0        ; 时钟速率选择位 0
.equ        SPR1        = 1        ; 时钟速率选择位 1
.equ        CPHA        = 2        ; 时钟相位控制位
.equ        CPOL        = 3        ; 时钟极性控制位
.equ        MSTR        = 4        ; 主机从机选择控制位
.equ        DORD        = 5        ; 数据次序控制位
.equ        SPE        = 6        ; SPI 使能位
.equ        SPIE        = 7        ; SPI 中断使能位

.equ        GPIOR2        = 0x2b
; GPIOR2 - 通用寄存器 2
.equ        GPIOR20        = 0        ; 通用寄存器2位0
.equ        GPIOR21        = 1        ; 通用寄存器2位1
.equ        GPIOR22        = 2        ; 通用寄存器2位2
.equ        GPIOR23        = 3        ; 通用寄存器2位3
.equ        GPIOR24        = 4        ; 通用寄存器2位4
.equ        GPIOR25        = 5        ; 通用寄存器2位5
.equ        GPIOR26        = 6        ; 通用寄存器2位6
.equ        GPIOR27        = 7        ; 通用寄存器2位7

.equ        GPIOR1        = 0x2a
; GPIOR1 - 通用寄存器 1
.equ        GPIOR10        = 0        ; 通用寄存器1位0
.equ        GPIOR11        = 1        ; 通用寄存器1位1
.equ        GPIOR12        = 2        ; 通用寄存器1位2
.equ        GPIOR13        = 3        ; 通用寄存器1位3
.equ        GPIOR14        = 4        ; 通用寄存器1位4
.equ        GPIOR15        = 5        ; 通用寄存器1位5
.equ        GPIOR16        = 6        ; 通用寄存器1位6
.equ        GPIOR17        = 7        ; 通用寄存器1位7

.equ        OCR0B        = 0x28
; OCR0B - Timer/Counter0 Output Compare Register
.equ        OCR0B0        = 0        ;
.equ        OCR0B1        = 1        ;
.equ        OCR0B2        = 2        ;
.equ        OCR0B3        = 3        ;
.equ        OCR0B4        = 4        ;
.equ        OCR0B5        = 5        ;
.equ        OCR0B6        = 6        ;
.equ        OCR0B7        = 7        ;

.equ        OCR0A        = 0x27
; OCR0A - Timer/Counter0 Output Compare Register
.equ        OCR0A0        = 0        ;
.equ        OCR0A1        = 1        ;
.equ        OCR0A2        = 2        ;
.equ        OCR0A3        = 3        ;
.equ        OCR0A4        = 4        ;
.equ        OCR0A5        = 5        ;
.equ        OCR0A6        = 6        ;
.equ        OCR0A7        = 7        ;

.equ        TCNT0        = 0x26
; TCNT0 - Timer/Counter0
.equ        TCNT00        = 0        ;
.equ        TCNT01        = 1        ;
.equ        TCNT02        = 2        ;
.equ        TCNT03        = 3        ;
.equ        TCNT04        = 4        ;
.equ        TCNT05        = 5        ;
.equ        TCNT06        = 6        ;
.equ        TCNT07        = 7        ;

.equ        TCCR0B        = 0x25
; TCCR0B - Timer/Counter Control Register B
.equ        CS00        = 0        ; Clock Select
.equ        CS01        = 1        ; Clock Select
.equ        CS02        = 2        ; Clock Select
.equ        WGM02        = 3        ; TC0 波形产生模式控制高位
.equ        OC0AS        = 5        ; OC0A输出端口选择控制位
.equ        FOC0B        = 6        ; TC0 强制输出比较 B 控制位
.equ        FOC0A        = 7        ; TC0 强制输出比较 A 控制位

.equ        TCCR0A        = 0x24
; TCCR0A - Timer/Counter  Control Register A
.equ        WGM00        = 0        ; Waveform Generation Mode
.equ        WGM01        = 1        ; Waveform Generation Mode
.equ        COM0B0        = 4        ; Compare Output Mode, Fast PWm
.equ        COM0B1        = 5        ; Compare Output Mode, Fast PWm
.equ        COM0A0        = 6        ; Compare Output Mode, Phase Correct PWM Mode
.equ        COM0A1        = 7        ; Compare Output Mode, Phase Correct PWM Mode

.equ        GTCCR        = 0x23
; GTCCR - General Timer/Counter Control Register
.equ        PSRSYNC        = 0        ; 预分频器 CPS10 复位控制位
.equ        PSRASY        = 1        ; For compatibility
.equ        TSM        = 7        ; 定时计数器同步模式控制位

.equ        EEARH        = 0x22
; EEARH - FLASH/E2PROM地址寄存器高字节
.equ        EEAR8        = 0        ; EFLASH/E2PROM 访问地址高 5位
.equ        EEAR9        = 1        ;
.equ        EEAR10        = 2        ;
.equ        EEAR11        = 3        ;
.equ        EEAR12        = 4        ;

.equ        EEARL        = 0x21
; EEARL - FLASH/E2PROM地址寄存器低字节
.equ        EEAR0        = 0        ; EFLASH/E2PROM 访问地址低 8位
.equ        EEAR1        = 1        ;
.equ        EEAR2        = 2        ;
.equ        EEAR3        = 3        ;
.equ        EEAR4        = 4        ;
.equ        EEAR5        = 5        ;
.equ        EEAR6        = 6        ;
.equ        EEAR7        = 7        ;

.equ        EEDR        = 0x20
; EEDR -  FLASH/E2PROM 数据寄存器
.equ        EEDR0        = 0        ; EFLASH/E2PROM 数据寄存器
.equ        EEDR1        = 1        ;
.equ        EEDR2        = 2        ;
.equ        EEDR3        = 3        ;
.equ        EEDR4        = 4        ;
.equ        EEDR5        = 5        ;
.equ        EEDR6        = 6        ;
.equ        EEDR7        = 7        ;

.equ        EECR        = 0x1f
; EECR - FLASH/E2PROM 控制寄存器
.equ        EERE        = 0        ; EEPROM Read Enable
.equ        EEPE        = 1        ; EEPROM Write Enable
.equ        EEMPE        = 2        ; EEPROM Master Write Enable
.equ        EERIE        = 3        ; EEPROM Ready Interrupt Enable
.equ        EEPM0        = 4        ; EEPROM Programming Mode Bit 0
.equ        EEPM1        = 5        ; EEPROM Programming Mode Bit 1
.equ        EEPM2        = 6        ; EEPROM Programming Mode Bit 2
.equ        EEPM3        = 7        ; EEPROM Programming Mode Bit 3

.equ        GPIOR0        = 0x1e
; GPIOR0 - 通用寄存器 0
.equ        GPIOR00        = 0        ; 通用寄存器0位0
.equ        GPIOR01        = 1        ; 通用寄存器0位1
.equ        GPIOR02        = 2        ; 通用寄存器0位2
.equ        GPIOR03        = 3        ; 通用寄存器0位3
.equ        GPIOR04        = 4        ; 通用寄存器0位4
.equ        GPIOR05        = 5        ; 通用寄存器0位5
.equ        GPIOR06        = 6        ; 通用寄存器0位6
.equ        GPIOR07        = 7        ; 通用寄存器0位7

.equ        EIMSK        = 0x1d
; EIMSK - External Interrupt Mask Register
.equ        INT0        = 0        ; External Interrupt Request 0 Enable
.equ        INT1        = 1        ; External Interrupt Request 1 Enable

.equ        EIFR        = 0x1c
; EIFR - External Interrupt Flag Register
.equ        INTF0        = 0        ; External Interrupt Flag 0
.equ        INTF1        = 1        ; External Interrupt Flag 1

.equ        PCIFR        = 0x1b
; PCIFR - Pin Change Interrupt Flag Register
.equ        PCIF0        = 0        ; Pin Change Interrupt Flag 0
.equ        PCIF1        = 1        ; Pin Change Interrupt Flag 1
.equ        PCIF2        = 2        ; Pin Change Interrupt Flag 2
.equ        PCIF3        = 3        ; Pin Change Interrupt Flag 3

.equ        TIFR2        = 0x17
; TIFR2 - Timer/Counter Interrupt Flag Register
.equ        TOV2        = 0        ; Timer/Counter2 Overflow Flag
.equ        OCF2A        = 1        ; Output Compare Flag 2A
.equ        OCF2B        = 2        ; Output Compare Flag 2B

.equ        TIFR1        = 0x16
; TIFR1 - Timer/Counter Interrupt Flag register
.equ        TOV1        = 0        ; Timer/Counter1 Overflow Flag
.equ        OCF1A        = 1        ; Timer/Counter1 Output Compare A Match Flag
.equ        OCF1B        = 2        ; Timer/Counter1 Output Compare B Match Flag
.equ        ICF1        = 5        ; Timer/Counter1 Input Capture Flag

.equ        TIFR0        = 0x15
; TIFR0 - Timer/Counter0 Interrupt Flag register
.equ        TOV0        = 0        ; TC0 溢出标志位
.equ        OCF0A        = 1        ; TC0 输出比较 A匹配标志位
.equ        OCF0B        = 2        ; TC0 输出比较 B 匹配标志位

.equ        OP1TCNT        = 0x14

.equ        OP1CRB        = 0x13

.equ        OP1CRA        = 0x12

.equ        DAL1        = 0x11

.equ        AFTCNT1        = 0x10

.equ        AC1CSR        = 0x0f

.equ        PORTD        = 0x0b
; PORTD - Port D Data Register
.equ        PORTD0        = 0        ; Port D Data Register bit 0
.equ        PD0        = 0        ; For compatibility
.equ        PORTD1        = 1        ; Port D Data Register bit 1
.equ        PD1        = 1        ; For compatibility
.equ        PORTD2        = 2        ; Port D Data Register bit 2
.equ        PD2        = 2        ; For compatibility
.equ        PORTD3        = 3        ; Port D Data Register bit 3
.equ        PD3        = 3        ; For compatibility
.equ        PORTD4        = 4        ; Port D Data Register bit 4
.equ        PD4        = 4        ; For compatibility
.equ        PORTD5        = 5        ; Port D Data Register bit 5
.equ        PD5        = 5        ; For compatibility
.equ        PORTD6        = 6        ; Port D Data Register bit 6
.equ        PD6        = 6        ; For compatibility
.equ        PORTD7        = 7        ; Port D Data Register bit 7
.equ        PD7        = 7        ; For compatibility

.equ        DDRD        = 0x0a
; DDRD - Port D Data Direction Register
.equ        DDD0        = 0        ; Port D Data Direction Register bit 0
.equ        DDD1        = 1        ; Port D Data Direction Register bit 1
.equ        DDD2        = 2        ; Port D Data Direction Register bit 2
.equ        DDD3        = 3        ; Port D Data Direction Register bit 3
.equ        DDD4        = 4        ; Port D Data Direction Register bit 4
.equ        DDD5        = 5        ; Port D Data Direction Register bit 5
.equ        DDD6        = 6        ; Port D Data Direction Register bit 6
.equ        DDD7        = 7        ; Port D Data Direction Register bit 7

.equ        PIND        = 0x09
; PIND - Port D Input Pins
.equ        PIND0        = 0        ; Port D Input Pins bit 0
.equ        PIND1        = 1        ; Port D Input Pins bit 1
.equ        PIND2        = 2        ; Port D Input Pins bit 2
.equ        PIND3        = 3        ; Port D Input Pins bit 3
.equ        PIND4        = 4        ; Port D Input Pins bit 4
.equ        PIND5        = 5        ; Port D Input Pins bit 5
.equ        PIND6        = 6        ; Port D Input Pins bit 6
.equ        PIND7        = 7        ; Port D Input Pins bit 7

.equ        PORTC        = 0x08
; PORTC - Port C Data Register
.equ        PORTC0        = 0        ; Port C Data Register bit 0
.equ        PC0        = 0        ; For compatibility
.equ        PORTC1        = 1        ; Port C Data Register bit 1
.equ        PC1        = 1        ; For compatibility
.equ        PORTC2        = 2        ; Port C Data Register bit 2
.equ        PC2        = 2        ; For compatibility
.equ        PORTC3        = 3        ; Port C Data Register bit 3
.equ        PC3        = 3        ; For compatibility
.equ        PORTC4        = 4        ; Port C Data Register bit 4
.equ        PC4        = 4        ; For compatibility
.equ        PORTC5        = 5        ; Port C Data Register bit 5
.equ        PC5        = 5        ; For compatibility
.equ        PORTC6        = 6        ; Port C Data Register bit 6
.equ        PC6        = 6        ; For compatibility
.equ        PORTC7        = 7        ; Port C Data Register bit 7
.equ        PC7        = 7        ; For compatibility

.equ        DDRC        = 0x07
; DDRC - Port C Data Direction Register
.equ        DDC0        = 0        ; Port C Data Direction Register bit 0
.equ        DDC1        = 1        ; Port C Data Direction Register bit 1
.equ        DDC2        = 2        ; Port C Data Direction Register bit 2
.equ        DDC3        = 3        ; Port C Data Direction Register bit 3
.equ        DDC4        = 4        ; Port C Data Direction Register bit 4
.equ        DDC5        = 5        ; Port C Data Direction Register bit 5
.equ        DDC6        = 6        ; Port C Data Direction Register bit 6
.equ        DDC7        = 7        ; Port C Data Direction Register bit 7

.equ        PINC        = 0x06
; PINC - Port C Input Pins
.equ        PINC0        = 0        ; Port C Input Pins bit 0
.equ        PINC1        = 1        ; Port C Input Pins bit 1
.equ        PINC2        = 2        ; Port C Input Pins bit 2
.equ        PINC3        = 3        ; Port C Input Pins bit 3
.equ        PINC4        = 4        ; Port C Input Pins bit 4
.equ        PINC5        = 5        ; Port C Input Pins bit 5
.equ        PINC6        = 6        ; Port C Input Pins bit 6
.equ        PINC7        = 7        ; Port C Input Pins bit 7

.equ        PORTB        = 0x05
; PORTB - Port B Data Register
.equ        PORTB0        = 0        ; Port B Data Register bit 0
.equ        PB0        = 0        ; For compatibility
.equ        PORTB1        = 1        ; Port B Data Register bit 1
.equ        PB1        = 1        ; For compatibility
.equ        PORTB2        = 2        ; Port B Data Register bit 2
.equ        PB2        = 2        ; For compatibility
.equ        PORTB3        = 3        ; Port B Data Register bit 3
.equ        PB3        = 3        ; For compatibility
.equ        PORTB4        = 4        ; Port B Data Register bit 4
.equ        PB4        = 4        ; For compatibility
.equ        PORTB5        = 5        ; Port B Data Register bit 5
.equ        PB5        = 5        ; For compatibility
.equ        PORTB6        = 6        ; Port B Data Register bit 6
.equ        PB6        = 6        ; For compatibility
.equ        PORTB7        = 7        ; Port B Data Register bit 7
.equ        PB7        = 7        ; For compatibility

.equ        DDRB        = 0x04
; DDRB - Port B Data Direction Register
.equ        DDB0        = 0        ; Port B Data Direction Register bit 0
.equ        DDB1        = 1        ; Port B Data Direction Register bit 1
.equ        DDB2        = 2        ; Port B Data Direction Register bit 2
.equ        DDB3        = 3        ; Port B Data Direction Register bit 3
.equ        DDB4        = 4        ; Port B Data Direction Register bit 4
.equ        DDB5        = 5        ; Port B Data Direction Register bit 5
.equ        DDB6        = 6        ; Port B Data Direction Register bit 6
.equ        DDB7        = 7        ; Port B Data Direction Register bit 7

.equ        PINB        = 0x03
; PINB - Port B Input Pins
.equ        PINB0        = 0        ; Port B Input Pins bit 0
.equ        PINB1        = 1        ; Port B Input Pins bit 1
.equ        PINB2        = 2        ; Port B Input Pins bit 2
.equ        PINB3        = 3        ; Port B Input Pins bit 3
.equ        PINB4        = 4        ; Port B Input Pins bit 4
.equ        PINB5        = 5        ; Port B Input Pins bit 5
.equ        PINB6        = 6        ; Port B Input Pins bit 6
.equ        PINB7        = 7        ; Port B Input Pins bit 7

; ***** CPU REGISTER DEFINITIONS *****************************************
.def        XH        = r27
.def        XL        = r26
.def        YH        = r29
.def        YL        = r28
.def        ZH        = r31
.def        ZL        = r30

; ***** DATA MEMORY DECLARATIONS *****************************************
.EQU        FLASHEND        = 0x3fff        ; Note: Word address
.EQU        IOEND                = 0x00ff
.EQU        SRAM_START        = 0x0100
.EQU        SRAM_SIZE        = 2048
.EQU        RAMEND                = 0x08ff
.EQU        XRAMEND                = 0x0000
.EQU        E2END                = 0x03ff
.EQU        EEPROMEND        = 0x03ff
.EQU        EEADRBITS        = 10
#pragma AVRPART MEMORY PROG_FLASH 32768
#pragma AVRPART MEMORY EEPROM 1024
#pragma AVRPART MEMORY INT_SRAM SIZE 2048
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x100

; ***** BOOTLOADER DECLARATIONS ******************************************
.EQU        NRWW_START_ADDR        = 0x3800
.EQU        NRWW_STOP_ADDR        = 0x3FFF
.EQU        RWW_START_ADDR        = 0x0
.EQU        RWW_STOP_ADDR        = 0x37ff
.EQU        PAGESIZE        = 64
.EQU        FIRSTBOOTSTART        = 0x3f00
.EQU        SECONDBOOTSTART        = 0x3e00
.EQU        THIRDBOOTSTART        = 0x3c00
.EQU        FOURTHBOOTSTART        = 0x3800
.EQU        SMALLBOOTSTART        = FIRSTBOOTSTART
.EQU        LARGEBOOTSTART        = FOURTHBOOTSTART

; ***** INTERRUPT VECTORS ************************************************
.EQU        INT0addr        = 0x0002        ; 外部中断请求 0
.EQU        INT1addr        = 0x0004        ; 外部中断请求 1
.EQU        PCI0addr        = 0x0006        ; 引脚电平中断 0
.EQU        PCI1addr        = 0x0008        ; 引脚电平中断 1
.EQU        PCI2addr        = 0x000A        ; 引脚电平中断 2
.EQU        WDTaddr                = 0x000C        ; 看门狗溢出中断
.EQU        OC2Aaddr        = 0x000E        ; 定时器 2 比较匹配 A 中断
.EQU        OC2Baddr        = 0x0010        ; 定时器 2 比较匹配 B 中断
.EQU        OVF2addr        = 0x0012        ; 定时器 2 溢出中断
.EQU        ICP1addr        = 0x0014        ; 定时器 1 输入捕捉中断
.EQU        OC1Aaddr        = 0x0016        ; 定时器 1 比较匹配 A 中断
.EQU        OC1Baddr        = 0x0018        ; 定时器 1 比较匹配 B 中断
.EQU        OVF1addr        = 0x001A        ; 定时器 1 溢出中断
.EQU        OC0Aaddr        = 0x001C        ; 定时器 0 比较匹配 A 中断
.EQU        OC0Baddr        = 0x001E        ; 定时器 0 比较匹配 B 中断
.EQU        OVF0addr        = 0x0020        ; 定时器 0 溢出中断
.EQU        SPIaddr                = 0x0022        ; SPI 串行传输结束中断
.EQU        URXCaddr        = 0x0024        ; USART 接收结束中断
.EQU        UDREaddr        = 0x0026        ; USART 数据寄存器空中断
.EQU        UTXCaddr        = 0x0028        ; USART 发送结束中断
.EQU        ADCCaddr        = 0x002A        ; ADC 转换结束中断
.EQU        ERDYaddr        = 0x002C        ; EEPROM 就绪中断
.EQU        ACIaddr                = 0x002E        ; 模拟比较器0中断
.EQU        TWIaddr                = 0x0030        ; 两线串行接口中断
.EQU        ACI2addr        = 0x0032        ; 模拟比较器1中断
;                                        ; 保留
.EQU        PCI3addr        = 0x0036        ; 引脚电平中断 3
.EQU        OPA0adr                = 0x0038        ; OPA0内置定时器比较匹配中断
.EQU        OPA1addr        = 0x003A        ; OPA1内置定时器比较匹配中断

.equ        INT_VECTORS_SIZE= 60                ; size in words

#endif  /* _328DDEF_INC_ */

出0入0汤圆

 楼主| 发表于 2015-11-16 14:58:21 | 显示全部楼层
LGT 发表于 2015-11-16 14:28
在软件设置上, 328D和88A在外部OSC做TMR2输入上是一致的。
不同在于328D与88A中断向量是不同的, 88A的程 ...

328D的RTC功能到底能不能用呀。

出0入0汤圆

发表于 2015-11-16 15:08:21 | 显示全部楼层
HYLG 发表于 2015-11-16 14:58
328D的RTC功能到底能不能用呀。


撸主NB,手工PCB和汇编!两样都戳中屌丝我的痛,引用黄易风格回帖请收下小弟的膝盖

另,给撸主一个安慰,按照惯例, 手册上有的东西一定是能用的,不然早被口水淹死

出0入0汤圆

 楼主| 发表于 2015-11-16 15:16:54 | 显示全部楼层
手册上有的东西一定是能用的,这话绝对了。
LGT的手册和AVR的手册不是一回事。
凡事以事实为根据。

出0入0汤圆

发表于 2015-11-16 15:27:37 | 显示全部楼层
牛人      

出0入0汤圆

发表于 2015-11-16 16:06:39 | 显示全部楼层
HYLG 发表于 2015-11-16 15:16
手册上有的东西一定是能用的,这话绝对了。
LGT的手册和AVR的手册不是一回事。
凡事以事实为根据。 ...

嗯, 这是事实, 因为人力的原因,我们的手册没有充分的勘误, 所以一定会有出入。 我们也会不停的更新版本。
另外楼主的头文件如果88A可以用, 那么寄存器的地址定义应该都是没有问题的。

328D的RTC和88A一样, 是没有问题的。
目前的问题是晶振没有起振, 可否提供下HEX给我们测试下? 另外有没有更换芯片测试下?

出0入0汤圆

 楼主| 发表于 2015-11-16 18:15:12 | 显示全部楼层
谢谢版主的耐心回复。
我手里有3块328D的最小系统板。一块88D的最小系统板。
3块都不起振。芯片和晶振都换过了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出10入10汤圆

发表于 2015-11-17 07:50:28 | 显示全部楼层
LGT8F88A的RTC在Power/Off S0和Power/Off S1模式无法唤醒,这点与Atmega48不同

出0入0汤圆

 楼主| 发表于 2015-11-17 09:54:31 | 显示全部楼层
版主能否给个RTC可用的程序。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 23:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表