请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 #include #include #include "math.h" #define TXLED BIT0 #define RXLED BIT6 #define TXD BIT2 #define RXD BIT1 int tester1=0; int tester2=0; int tester3=0; int tester4=0; int tester5=0; int testerper6=0; int testerper7=0; int tester8=0; int tester9=0; int TX_DATA[10]; volatile int ten=1; int iData = 0;//数据计数器 int sayi = 1;//计数 器 volatile int i=0; volatile int j=0; int digit=0; int temp=0; void 初始化 eGPIO (void) { // P1OUT &= 0x00; //关闭所有内容 P1DIR &= 0x00; P1DIR |= BIT7; P1OUT |= BIT7; // P1.7 bizim outputumuz P1REN |= BIT3; //启用内部上拉/下拉电阻器 P1OUT |= BIT3; P1IE |= BIT3; // P1.3中断被启用 P1IES |= BIT3; // P1.3高/低边沿 P1IFG &=~BIT3; // P1.3 IFG 已清除 } void 初始化时钟(void) { // WDTCTL = WDTPW + WDTHOLD;//停止 WDT DCOCTL = 0;//选择最低 DCOx 和 MODx 设置 BCSCTL1 = CALBC1_1MHz;//设置 DCO DCOCTL = CALDCO_1MHz; UCA0CTL1 |= UCSSEL_2;// SMCLK UCA0BR0 = 0x08;// 1MHz 115200 UCA0BR1 = 0x00;// 1MHz 115200 } void 初始化 TimerA (void) { // TA0CTL = 0; TA0CTL |= TACLR;//reset leyelim TA0R = 0;// Emin olmak için TAR0'ı daresetleyelim gerçi TACLR bu işi yapıyor TA0CTL |= tassel_2;// SMCLK CLK 时钟源 olarak secildi TA0CTL |= tassel_2;// SMCLK CLK 时钟源 olarak secildi TA0CTL |= ID_0;// aynen bölmeden 1MHz devam TA0CTL |= MC_1;//向上计数模式 da çalışsın TA0CCR0 = 417;// 2400Hz için bir periyot bu kadar sayım TA0CCR1 = 13;//比较 reg1 13 Yani 38.4kHz periodun yarısı //TA0CCTL0 = 0; TA0CCTL0 &=~CCIFG;//标记 varsa temizleyelim gerçi başta 0A eşitledik komple registeri ama TA0CCTL0 |= CCIE;//捕获比较中断使能 TA0CCTL1 &=~CCIFG;//标记 varsa temizleyelim gerçi başta 0A eşitledik komple registeri ama TA0CCTL1 |= CCIE;//捕捉比较中断使能 TA0CTL |= TAIE;// interrtlar açıldı //TA0CCTL0 |= CM_0;//bu zaten 00*/| } int int_TO_int (unsigned k){ 如果(k = 0)返回0; 如果(k = 1)返回1; /*可选*/ 返回(k%2)+ 10 * int_TO_int (k / 2); } void 初始化数据(int k) { // temp = int_TO_int (k); 数字= log10 (temp)+ 1; 对于(I = 0;I < 10;I++) { // if (i=0) { // TX_DATA[I]=1; } 其他 { // if (i<1+数字&& 1+digit < 9) { // if (i=1) { // TX_DATA[I]=温度% 10; } 其他 { // 10 = 1; 对于(j=0;j我想通过 IR 感应实现 UART 协议。 一个停止位、8位数据和1位停止位类似如下:
数据速率将为2400、因此我将时钟设置为1MHz 并将其除以417、这是一个位传输的持续时间。 但是、计时器 A 的行为有点奇怪。
您可以在上面的代码中检查、我将 CCR0设置为417、并在 timer0_A0中切换数据。
此外、当数据为零时、我会使 CCR1递增13、这是38KHz 的半周期、并在 timer0_A1中的每个比较中断中切换输出引脚 p1.7
但最重要的是、似乎对于 CCR1的每个比较中断、都会触发 timer0_A0和 timer0_A1中断、并且即使我尝试将 TA0CCR1除以13到417、它也会在最大39处停止。 自上周以来,我一直不知道这一点。 可以帮助我评估此问题吗?
