This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5528:时间测量

Guru**** 2538960 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/662977/msp430f5528-time-measurement

部件号:MSP430F5528

您好,

我想测量传输和接收之间的时间间隔,并将其显示在LCD上。 我编写了一个代码,在数据传输时启用计时器0,在接收数据时停止计时器。 然后将TA0R值复制到LCD。 每次显示数据时,它都是一些随机值。 我将在此处插入我的代码。 如果有任何问题,请指导我。

#include <MSP430-h>

#define DR P4OUT = P4OUT | BIT1 // define RS high
#define CWR P4OUT = P4OUT &(~BIT1)// define RS low
#define read P4OUT = P4Write | BIT2 // define read signal R/W = 1 for reading
#define write P4OUT = P4OUT &(~BIT2)/ define) 信号R/W = 0表示写入
#define enable_high P1OUT = P1OUT | BIT4 //定义启用高信号
#define enable_low P1OUT = P1OUT &(~BIT4)//定义启用低信号
无符号int i;
}unsigned int j;

void delay (unsigned int k)
{
for (j=0;j<=k;j;j+)




;void i=100;


DELAY (2);
enable_low;
}
void data_read(void)
{
enable_low;
delay(2);
enable_high
;}
void check_busy (void)
{
PIR &=~(BIT3);//将WFP设置1.3 为输入
,同时(PJIN&BIT3)=1)
{
DATA_Read();JDPIR|CWOR=0CMD; 1.3








=0=0=0;{)= 0WF0;{PJPJPJUMP0;{)== 0;{)= 0=0=0;{PJPJPJF0;{)=输出<= 0;{= 0;{)= 0CMF0=}发送<= 0 //发送较高的nibble
data_write();//给出启用触发
器PJOUT =(PJOUT & 0xF0)|(CD & 0x0F);//发送较低的nibble
data_write();//给出启用触发
器}
void send_data (unsigned int data){

CHECK_busy();
write;
DR;
0xOUT =(PJOUT & 0xF0F0)|/_send data>4; send
// given enable trigger
PJOUT =(PJOUT & 0xF0)|(data & 0x0F);// send lower nibble
data_write();// given enable trigger
}
void send_string(char*s)
{
while (*s)
{
send_data(*s);
s++
}
}}PJDLC_init(void)

{
PJDIR |=0x4DIR= 0xPf;= 0x4DIF=0




P1OUT &= 0x00;
send_command(0x33);
send_command(0x32);
// 4位模式
send_command(0x0E);//清除屏幕
send_command(0x01);//在send_command(0x06)上显示光标
;//递增光标
send_command(0x80);//






WDTTL主列1;wint =1wt //停止WDT
P4SEL = BIT4+BIT5; // WFP 3.4 ,5 = USI_A0 TXD/RXD
UCA1CTL1 |= UCSWRST; //**将状态机置于复位**
UCA1CTL1 || UCSSEL_2; // SMCLK
UCA1BR0 = 6; // 1MHz 9600 (请参阅用户指南)
UCA1BR1 = 0; // 1MHz 9600
UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;// Modln UCBRSx=0,UCBRFx=0,
//过度采样
UCA1CTL1 &=~UCSWRST; //**初始化USCI状态机**

UCA1IE |= UCRXIE; //启用USI_A0 RX中断
,同时(!(UCA1IFG&UCTXIFG)); // USI_A0 TX缓冲器就绪?
UCA1TXBUF = 53; // tx -> RXed character
__bis_sr_register (LPM0_BITS + GIE); //输入LPM0,启用中断
__NO_OPEINENT(); //对于调试器
,//

回显RXed字符,确认TX缓冲区已就绪,首先
#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_icc__)
#pragma vector=UISR_A1_vector
__interrupt void USI_A1_ISR(void)
#Elif defined(___GSCI_attribute__)



#endif
{
SWITCH(__EIN_RANGE(UCA1IV,4)){

案例0:break; //矢量0-无中断
情况2:
TA0CTL = MC__STOP;
数据= TA0R;//矢量2 - RXIFG
lcd_init();
send_data (data);
同时(!(UCA1IFG&UCTXIFG)); // USI_A0 TX缓冲器就绪?
UCA1TXBUF = UCA1RXBUF; // TX -> RXed字符
TA0CCR0 = 6.5535万;
TA0CTL = tassel_2 + MC_1 + TCLR; // SMCLK,上行模式,清除TAR
中断;
案例4:

中断; //矢量4- TXIFG
默认值:中断;
}





谢谢...

Pabel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    它显示参数类型与参数类型不兼容。 所以我声明参数'char'而不是'int'仍然没有效果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Pabel,

    通常,在发送要在LCD上显示的数据时,需要将该数据转换为ASCII值。 您在这里做这件事吗? 根据我收集到的信息,您的LCD是基于UART的,对吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    我已将该数据转换为ASCII值,然后再发送到LCD。 但问题没有解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Pabel,

    我会仔细检查液晶屏的说明文件,确保向其发送正确的字符。 您还可以探测UART行,以查看正在发送的确切字符,以及是否在LCD正在解释的行上发送了额外的数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    谢谢..

    我期待您的回复。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pabel,

    您是否能够探测行并查看是否发送了额外的字符?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我没有任何仪器来探测这种情况。

    谢谢

    Pabel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Pabel,

    我强烈建议使用逻辑分析仪或具有逻辑分析仪功能的示波器。这使调试通信协议成为一个轻松的过程。 正常的示波器也可以正常工作,但由于您必须解码数字协议本身,因此该过程需要更多的手动操作。这需要时间和对协议的深入了解,才能最大限度地减少错误。

    您还可以查看以下应用说明,了解不同通信协议的常见问题。 http://www.ti.com/lit/slaa734

    除上述步骤外,我没有任何进一步的建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了使其更简单,您只需重写代码,以重复发送相同的字符,从而更容易进行故障排除。 实际上,最好只编写一个程序,通过发送已知数据与LCD通信。 完成此操作后,添加时间显示。

    此外,中断处理程序中的操作也非常多。 中断处理程序应该执行一项操作并返回。 是否确实需要在每次发送字符时初始化液晶屏?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    我已经通过发送已知数据完成了LCD的连接,它工作正常。

    然后进入液晶屏初始化部分,当我在主程序中执行该部分时,它不会在每次接收时显示数据。 所以我在ISR中撰写这一部分。