|
- #include <msp430.h>
- unsigned char char_ch = 0x00;
- int main(void)
- {
- volatile unsigned int i;
- WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
- P1OUT = BIT4;
- P1REN |= BIT4; // P1.4 上拉电阻(P1OUT决定)
- P1DIR = BIT0; // P1.0 输出
- P1OUT |= BIT0;
- USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE;
- /*
- * USIPE7 SPI输入模式,I2C开漏输出
- * USIPE7 SPI输出模式,I2C开漏输出
- * USIPE5 SPI从机输入,I2C,SPI主机输出
- * USILSB LSB优先
- * USIMST 主机模式
- * USIGE 输出锁存
- * USIOE 数据输出使能
- * USISWRST 软复位
- */
- USICTL1 |= USIIE;
- /*
- * USICKPH SCLK的上升沿捕捉,下降沿发送.
- * USII2C I2C使能
- * USISTTIE 传输开始时中断
- * USIIE 中断开启
- * USIAL 关闭仲裁
- * USISTP 启用停止标记
- * USISTTIFG 收到开始信号时候的请求中断标记.
- * USIIFG USI计数器中断标记
- */
- USICKCTL = USIDIV_4 + USISSEL_2;
- /*
- * USIDIV 分频器1,2,4,8,16,32,64,128
- * USISSEL 时钟源SCLK(SPI无效),ACLK,SMCLK,[NULL],USISWCLK,TACCR0,TACCR1,[NULL]
- * USICKPL 空闲时时钟信号为高电平
- * USISWCLK 输入时时钟信号为高电平
- */
- USICTL0 &= ~USISWRST; //USI操作软复位,数据立即需要准备.
- P1OUT &= ~BIT0;
- USISRL = char_ch++; //低8位数据,其实可以存16位,包含USISRH + USISRL (USI16B = 1)
- USICNT = 0x08;
- /*
- * USISCLREL SCL保持低电平,即使USIIFG置位
- * USI16B 16位模式
- * USIIFGCC USIIFG不自动清零
- * USICNT 设置发送位数0-F(1-16位)
- */
- _BIS_SR(LPM0_bits + GIE); // LPM0模式,总中断开启
- while(1){
- //立即发送下一次数据
- P1OUT &= ~BIT0;
- USISRL = char_ch++;
- USICNT = 0x08;
- }
- }
- // USI 中断服务路由
- #pragma vector=USI_VECTOR
- __interrupt void universal_serial_interface(void)
- {
- /*
- * 两个不同的中断服务,需要分开判断.
- * USIIFG 数据收发完成
- * USISTTIFG 请求接收
- */
- if(USICTL1 & USIIFG){
- //这是USIIFG中断服务
- P1OUT |= BIT0;
- }else{
- //这是USISTTIFG中断服务
- char_ch = USISRL;
- USICTL1 &= ~USISTTIFG ;
- }
- USICNT = 0x08;
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|