欧美极品高清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