打印
[通用8051核FLASH系列]

【芯圣SDK-HC89F0541测评】+ADC检测与串行通讯功能的结合使用

[复制链接]
785|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 芯圣电子官方QQ 于 2023-7-24 14:21 编辑

在开发板没有配置显示功能的情况下,使用串行通讯功能是较好的显示观察手段。对于ADC的检测效果的观察,就可以采用这种办法。
程序设计的思想是使用引脚P06来采集外部模拟信号值,并通过程序通讯来显示采样值。其中,P16为串行通讯的发送端,而P17为串行通讯的接收端。
ADC采集的显示函数为:
void PRT(void)
{
             int f=0;
             guc_Uartbuf_a[0]=gui_AdcValue/1000+'0';
             guc_Uartbuf_a[1]=gui_AdcValue%1000/100+'0';
             guc_Uartbuf_a[2]=gui_AdcValue%100/10+'0';
             guc_Uartbuf_a[3]=gui_AdcValue%10+'0';
             guc_Uartbuf_a[4]=0x0D;
             guc_Uartbuf_a[5]=0x0A;
             IE &=~ 0x40;
             for(guc_i=0;guc_i<6;guc_i++)
             {
                                     if((guc_Uartbuf_a[guc_i]>'0')||(f==1))
                                     {
                                               S2BUF = guc_Uartbuf_a[guc_i];
                                               f=1;
                                     }
                                     else
                                     {
                                               S2BUF = ' ';
                                     }
                                    
                                     if(guc_i==2) f=1;

                                     while(!(S2CON & 0x02));
                                     S2CON &=~ 0x02;
              }
             IE |= 0x40;
}


ADC采集的主程序为:
void main()
{

         while((CLKCON&0x20)!=0x20);
         CLKSWR = 0x51;                                                     
         while((CLKSWR&0xC0)!=0x40);
         CLKDIV = 0x01;
         P1M4 = 0xC2;                       

         P0M6 = 0x02;
         ADCC0 = 0x80;        
         ADCC1 = 0x06;        
         ADCC2 = 0x4B;                                                      

         P1M6 = 0xC2;
         P1M7 = 0x62;
         TXD2_MAP = 0x16;
         RXD2_MAP = 0x17;
        
         RCAP5H = 0xFF;
         RCAP5L = 0x98;
         T5CON = 0x06;        
         S2CON2 = 0x00;
         S2CON = 0x10;         
         IE |= 0x40;
         EA = 1;
        
         while(1)
         {
                   ADCC0 |= 0x40;
                   while(!(ADCC0&0x20));
                   ADCC0 &=~ 0x20;
                   gui_AdcValue = ADCR;
                   PRT();
                   delay();
         }
}


经程序下载后,检测的效果如下图所示。
检测效果

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2680

帖子

38

粉丝