欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 關于上位機lab傳輸數據給51單片機,單片機進行DA轉換的問題。 [打印本頁]

作者: khp123    時間: 2021-6-28 00:19
標題: 關于上位機lab傳輸數據給51單片機,單片機進行DA轉換的問題。
大佬們,想問一下關于上位機lab傳輸數據給51單片機,單片機進行DA轉換的問題。DA單獨調試的時候可以成功,換成上位機發送數據存進數組,數組里的數據DA轉換示波器就沒反應了。想著可能是數組里面的元素是十六進制的問題,之前單獨調試DA轉換常規十進制數的時候,示波器上面可以顯示波形。(單片機用的是stc8、工作頻率22.1184M、DA轉換用的是TLC5620)在此想請教大佬們幾個問題:1、DA轉換不能轉換十六進制的數嗎?比如說0X55?
2、如何要將數組類型進行轉換,十六進制數組怎么轉換為十進制數組呢?比如 unsigned char a[]={0X55,0X44,0X33,0X22}轉為unsigned char b[]={85,68,51,34}。
3、這里想要實現2ms從上位機實時發送數據單片機,單片機實時進行DA轉換2 ms輸出連續波形,該怎么做呢? Labview 需要安裝類似rt 驅動嗎?
希望大佬們能幫忙解答一下。非常感謝


單片機部分代碼貼上。

#include <STC8.H>
#include<intrins.h>
#include "delay.h"
#include "uart.h"

unsigned int count,state;
//定義I/O端口

sbit CLK=P1^0; //串行輸數據
sbit DAT=P1^1; //串行時鐘,
sbit LOAD=P1^2; //串行數據裝載,下降沿有效
sbit LDAC=P1^3; //DAC更新鎖存控制,下降沿有效
void Timer0Init(void)
{
    AUXR |= 0x80;
作者: khp123    時間: 2021-6-28 13:51
代碼續附:
#include <STC8.H>
#include<intrins.h>
#include "delay.h"
#include "uart.h"

unsigned int count,state;
//定義I/O端口

sbit CLK=P1^0; //串行輸數據
sbit DAT=P1^1; //串行時鐘,
sbit LOAD=P1^2; //串行數據裝載,下降沿有效
sbit LDAC=P1^3; //DAC更新鎖存控制,下降沿有效
void Timer0Init(void)
{
    AUXR |= 0x80;                //疑問????1T??
        TMOD &= 0xF0;                //疑問??????
        TMOD |= 0x01;                //疑問??????
        TL0 = 0x33;                //疑問?????
        TH0 = 0x53;                //疑問?????
        TF0 = 0;                //疑問?TF0??

        TR0=1;//啟動定時器T0
        ET0=1;//定時器T0允許中斷
}
void time0() interrupt 1  //2毫秒
{

        TF0=0;
        TL0 = 0x33;                //疑問?????
        TH0 = 0x53;                //疑問?????
         if(recv_flag==1)
         {
         recv_flag=0;
         state=1;
         }       
}
void Dac1( unsigned char addr, bit rng, unsigned char dat)
{
        unsigned char n;
        n = 2;
        do
        {
                DAT = (bit)(addr & 0x02);
                addr <<=1;
                //addr:DAC通道地址,取值0~3,對應通道A~D;
                CLK = 0;
                CLK = 1;       
        }
        while ( --n != 0 );
        DAT = rng;
        CLK = 0;
        CLK = 1;
        n = 8;
        do
                {
                        DAT = (bit)(dat & 0x80);  //傳送數據 高位開始傳
                        dat <<= 1;
                        CLK = 0;
                        CLK = 1;
                }
                while( --n != 0 )
                        ;
                LOAD = 0;
                LOAD = 1;

}

void Init_TLC5620( ) // 選擇的通道
{
        DAT = 1;
        CLK = 1;
        LDAC = 1;
        LOAD = 1;       
}

void main()
{
        unsigned char i;
       
  //定時器初始化
        Timer0Init();
    EA=1;        //開總中斷
        Init_TLC5620();               
    UartInit();       

        DelayXms(10);
         while(1)
   {
                 if( state==1)
                 { state=0;
                           sendString(recv_buf);//處理數據
                                Dac1(0,0,recv_buf[i]);//有信號輸出
//                P1=0;
//                                 DelayXms(10);
                                P1=P1&0x77; // 同步 先使P1^3和P1^7為0    P1&01110111
                                P1=P1|0x88; //同步  在使P1^3和P1^7為1    P1&10001000
                                i++;
                                //20210405  將 i>=247 改為number
                                if(i>=200)
                                {
                                        i=1;
                                       
                                }                                                                       
//        clr_recvbuffer(recv_buf);//清除緩沖BUFFER
                 }
               

}}
作者: llgg7799    時間: 2021-6-29 02:28
代碼續附:
#include <STC8.H>
#include<intrins.h>
#include "delay.h"
#include "uart.h"

unsigned int count,state;
//定義I/O端口

sbit CLK=P1^0; //串行輸數據
sbit DAT=P1^1; //串行時鐘,
sbit LOAD=P1^2; //串行數據裝載,下降沿有效
sbit LDAC=P1^3; //DAC更新鎖存控制,下降沿有效
void Timer0Init(void)
{
    AUXR |= 0x80;                //疑問????1T??
        TMOD &= 0xF0;                //疑問??????
        TMOD |= 0x01;                //疑問??????
        TL0 = 0x33;                //疑問?????
        TH0 = 0x53;                //疑問?????
        TF0 = 0;                //疑問?TF0??

        TR0=1;//啟動定時器T0
        ET0=1;//定時器T0允許中斷
}
void time0() interrupt 1  //2毫秒
{

        TF0=0;
        TL0 = 0x33;                //疑問?????
        TH0 = 0x53;                //疑問?????
         if(recv_flag==1)
         {
         recv_flag=0;
         state=1;
         }      
}
void Dac1( unsigned char addr, bit rng, unsigned char dat)
{
        unsigned char n;
        n = 2;
        do
        {
                DAT = (bit)(addr & 0x02);
                addr <<=1;
                //addr:DAC通道地址,取值0~3,對應通道A~D;
                CLK = 0;
                CLK = 1;      
        }
        while ( --n != 0 );
        DAT = rng;
        CLK = 0;
        CLK = 1;
        n = 8;
        do
                {
                        DAT = (bit)(dat & 0x80);  //傳送數據 高位開始傳
                        dat <<= 1;
                        CLK = 0;
                        CLK = 1;
                }
                while( --n != 0 )
                        ;
                LOAD = 0;
                LOAD = 1;

}

void Init_TLC5620( ) // 選擇的通道
{
        DAT = 1;
        CLK = 1;
        LDAC = 1;
        LOAD = 1;      
}

void main()
{
        unsigned char i;
      
  //定時器初始化
        Timer0Init();
    EA=1;        //開總中斷
        Init_TLC5620();               
    UartInit();      

        DelayXms(10);
         while(1)
   {
                 if( state==1)
                 { state=0;
                           sendString(recv_buf);//處理數據
                                Dac1(0,0,recv_buf[i]);//有信號輸出
//                P1=0;
//                                 DelayXms(10);
                                P1=P1&0x77; // 同步 先使P1^3和P1^7為0    P1&01110111
                                P1=P1|0x88; //同步  在使P1^3和P1^7為1    P1&10001000
                                i++;
                                //20210405  將 i>=247 改為number
                                if(i>=200)
                                {
                                        i=1;
                                       
                                }                                                                       
//        clr_recvbuffer(recv_buf);//清除緩沖BUFFER
                 }
               

}}




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1