六、端口设置<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1)、P1/P2 口(I/O Port1/2)
#define P<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1IN (0x0020) P1 输入寄存器:存放输入数据
#define P1OUT (0x0021) P1 输出寄存器:存放输出数据
#define P1DIR (0x0022) P1 方向寄存器:0:输入, 1:输出
#define P1IFG (0x0023) P1 中断标志寄存器:
#define P1IES (0x0024) P1 中断触发沿选择寄存器:0:上升沿中断。1:下降沿中断;
#define P1IE (0x0025) P1 中断允许寄存器:开放对应的中断 0:禁止, 1:开放
#define P1SEL (0x0026) P1 功能选择寄存器:0:端口功能,1:模块功能;
P2口的定义从 0X0028-----0X002E。
2)P3,P4,P5,P6口
#define PXIN 输入寄存器:存放输入数据
#define PXOUT 输出寄存器:存放输出数据
#define PXDIR 方向寄存器:0:输入, 1:输出
#define PXSEL 功能选择寄存器:0:端口功能,1:模块功能
七、基本定时器:BT
BTCTL 控制寄存器 040H
BTCNT1 计数器1 046H
BTCNT2 计数器2 047H
1)、控制寄存器 BTCTL (0x0040)
SSEL | HOLD | DIV | FRFQ1 | FRFQ0 | IP2 | IP1 | IP0 |
IP0,IP1,IP2:决定中断间隔时间,即BTIFG置位时间
FRFQ0 :选择flcd频率,
FRFQ1 :选择flcd频率,
DIV : fCLK2 = ACLK:256
HOLD : 1:停止BTCNT1工作,HOLD+DIV:停止BTCNT2工作;
SSEL : 与DIV一起选择BTCNT2的输入频率;
BTCNT1 (0x0046) /* Basic Timer Count 1计数器1*/
BTCNT2 (0x0047) /* Basic Timer Count 2计数器2*/
对应的Byte位如下:
2 e7 | 2e6 | 2e5 | 2e4 | 2e3 | 2e2 | 2e1 | 2e0 |
2)BT的设置(通过设置BTCTL的各位来设置)
BTCNT1:对时钟ACLK分频;
BTCNT2:对时钟频率分频,输入时钟可以是ACLK,MCLK或ACLK/256;
(1)、计数器2(BTCNT2)的输入频率设置
#define BT_fCLK2_ACLK (0x00) f=ACLK
#define BT_fCLK2_ACLK_DIV256 (BTDIV) f=ACLK/256
#define BT_fCLK2_MCLK (BTSSEL) f=MCLK
(2)、中断间隔时间的设置
#define BT_fCLK2_DIV2 (0x00) /* fINT = fCLK2:2 (default) */
#define BT_fCLK2_DIV4 (BTIP0) /* fINT = fCLK2:4 */
#define BT_fCLK2_DIV8 (BTIP1) /* fINT = fCLK2:8 */
#define BT_fCLK2_DIV16 (BTIP1+BTIP0) /* fINT = fCLK2:16 */
#define BT_fCLK2_DIV32 (BTIP2) /* fINT = fCLK2:32 */
#define BT_fCLK2_DIV64 (BTIP2+BTIP0) /* fINT = fCLK2:64 */
#define BT_fCLK2_DIV128 (BTIP2+BTIP1) /* fINT = fCLK2:128 */
#define BT_fCLK2_DIV256 (BTIP2+BTIP1+BTIP0) /* fINT = fCLK2:256 */
(3)当fBT=fACLK时 LCD的驱动频率设置
#define BT_fLCD_1K (0x00) /* fACLK:32 (default) */
#define BT_fLCD_512 (BTFRFQ0) /* fACLK:64 */
#define BT_fLCD_256 (BTFRFQ1) /* fACLK:128 */
#define BT_fLCD_128 (BTFRFQ1+BTFRFQ0) /* fACLK:256 */
(4)fBT=fMCLK 时 LCD 的频率设置
#define BT_fLCD_31K (BTSSEL) /* fMCLK:32 */
#define BT_fLCD_15_5K (BTSSEL+BTFRFQ0) /* fMCLK:64 */
#define BT_fLCD_7_8K (BTSSEL+BTFRFQ1+BTFRFQ0) /* fMCLK:256 */
(5)fBT=fACLK 时 中断时间设置
#define BT_ADLY_0_064 (0x00) /* 0.064ms interval (default) */
#define BT_ADLY_0_125 (BTIP0) /* 0.125ms " */
#define BT_ADLY_0_25 (BTIP1) /* 0.25ms " */
#define BT_ADLY_0_5 (BTIP1+BTIP0) /* 0.5ms " */
#define BT_ADLY_1 (BTIP2) /* 1ms " */
#define BT_ADLY_2 (BTIP2+BTIP0) /* 2ms " */
#define BT_ADLY_4 (BTIP2+BTIP1) /* 4ms " */
#define BT_ADLY_8 (BTIP2+BTIP1+BTIP0) /* 8ms " */
#define BT_ADLY_16 (BTDIV) /* 16ms " */
#define BT_ADLY_32 (BTDIV+BTIP0) /* 32ms " */
#define BT_ADLY_64 (BTDIV+BTIP1) /* 64ms " */
#define BT_ADLY_125 (BTDIV+BTIP1+BTIP0) /* 125ms " */
#define BT_ADLY_250 (BTDIV+BTIP2) /* 250ms " */
#define BT_ADLY_500 (BTDIV+BTIP2+BTIP0) /* 500ms " */
#define BT_ADLY_1000 (BTDIV+BTIP2+BTIP1) /* 1000ms " */
#define BT_ADLY_2000 (BTDIV+BTIP2+BTIP1+BTIP0) /* 2000ms " */
(6) fBT=fMCLK (1MHz) 中断时间设置
#define BT_MDLY_0_002 (BTSSEL) /* 0.002ms interval
#define BT_MDLY_0_004 (BTSSEL+BTIP0) /* 0.004ms "
#define BT_MDLY_0_008 (BTSSEL+BTIP1) /* 0.008ms "
#define BT_MDLY_0_016 (BTSSEL+BTIP1+BTIP0) /* 0.016ms "
#define BT_MDLY_0_032 (BTSSEL+BTIP2) /* 0.032ms " */
#define BT_MDLY_0_064 (BTSSEL+BTIP2+BTIP0) /* 0.064ms " */
#define BT_MDLY_0_125 (BTSSEL+BTIP2+BTIP1) /* 0.125ms " */
#define BT_MDLY_0_25 (BTSSEL+BTIP2+BTIP1+BTIP0)/* 0.25ms " */
(7)BT时钟选择 /*Reset/Hold coded with Bits 6-7 in BT(1)CTL */
#define BTHOLD_CNT1 (BTHOLD) 停止BTCNT1工作,
#define BTHOLD_CNT1_2 (BTHOLD+BTDIV) 停止BTCNT2工作;
(8)对应的SFR中断位和标志
#define BTIE 0x80 */
#define BTIFG 0x80 */
文章评论(0条评论)
登录后参与讨论