历史上的今天
今天是:2025年12月26日(星期五)
2022年12月26日 | 6通道dmx512控制器程序
2022-12-26 来源:zhihu
/**************************************************/
/*** File Name: 256.c ***/
/*** Product Name: SRC-256 ***/
/*** Description: 6 channel DMX controller ***/
/*** MCU: At89c2051(or At89c1051u) Xtal: 8MHz ***/
/*** Author: Hawk Wang, Date: 08/12 ***/
/*** Version: Rev 1.0 ***/
/**************************************************/
/*** IO assign map ***/
/*** P1 ---DAC data out ***/
/*** P3_0 ---NC ***/
/*** P3_1 ---Txd ***/
/*** P3_2 ---comparator out ***/
/*** P3_3 ---4051 a chanel ***/
/*** P3_4 ---4051 b chanel ***/
/*** P3_5 ---4051 c chanel ***/
/*** P3_7 ---573LE(not use) ***/
#pragma ROM(SMALL) OPTIMIZE (5,SIZE)
#include "AT892051.H"
//define crystal frequence
#define XTAL 8 //XTAL: 8MHz
//variable declare
unsigned char AdcDataList[7]; //0:master,1:channel1,2:channel2,etc.
//function declare
void Init(void);
unsigned char GetAdcValue(unsigned char ch_n); //ch_n range: 0~6(channel7 not use)
void DmxOut(void);
//main function
void main(void)
{
unsigned char adc_channel;
Init();
while(1) //runtime of while loop: 37ms(xtal=8mhz)
{
for(adc_channel=0;adc_channel<=6;adc_channel++)
{
AdcDataList[adc_channel] = GetAdcValue(adc_channel);
}
DmxOut();
}
}
/*** Initialize IO,UART ***/
void Init(void)
{
IE = 0x00; //disable all interrupt
P1 = 0xff;
P3 = 0xff;
TCON = 0x00;
#if XTAL == 8
PCON = 0x80; //SMOD=1
#else
PCON = 0x00; //SMOD=0
#endif
SCON = 0x88; //UART mode2,TB8=1,disable receive
}
/*** get adc value ***/
/*** ch_n=0: master ***/
/*** ch_n=1: ch1 ***/
/*** ........... ***/
/*** ch_n=6: ch6 ***/
unsigned char GetAdcValue(unsigned char ch_n)
{
unsigned char value;
P3 = (P3&0xc3)|(ch_n<<3)|0x04; //select ADC channel
P1 = 0xff;
for(value=0xff;(P3_2==1)&&(value>0); )
{
P1 = --value;
}
return (value);
}
void DmxOut(void)
{
unsigned char dimmer_number;
unsigned char delay_time;
TXD = 0; //sent reset,mark after reset
delay_time = 20; //delay (20*6+7)*1.5us>88us
while(delay_time--);//(delay_time*6+7)*12/XTAL
TXD = 1;
delay_time =2; //delay>8us
while(delay_time--);
SBUF = 0x00; //sent start code
while(!TI);
TI = 0;
for(dimmer_number=1;dimmer_number<=6;dimmer_number++)
{
SBUF = (unsigned char) (((unsigned int)(AdcDataList[dimmer_number]+1))*AdcDataList[0]>>8); //runtime=43*(12/XTAL)
while(!TI);
TI = 0;
}
}
上一篇:定时器功能演示程序
史海拾趣
|
C语言降龙十八掌——第五掌布尔类型是什么类型? 大家看一看,这段代码有什么问题? ...... char*buffer; /*Allocate memory with function of standard lib */ buffer =malloc (SIZE_OF_BUF); /* Checkif the memory allocate s ...… 查看全部问答> |
|
智林板以其不用库,开发上手快著称,销往美国,英国,韩国,日本,香港,台湾,越南,新加坡。。。 但有许多人用智林的例程确编译通不过。出现了 STM32_Init.c(4072): error: #136: struct \"<unnam ...… 查看全部问答> |
|
环境为Tornado2.2.1和VxWorks5.5和Tilcon5.4 现在在运行Tilcon的时候,目标服务器上只显示Tilcon的License,而没有twd文件,然后就是黑屏,TRT_Start返回-1 不管我如何重装,重新编译Bootrom和WindML和镜像,都没有用,更换了几款鼠标和显卡,问题依旧! ...… 查看全部问答> |
|
我的设备驱动已经编译到内核里了,并且创建了设备的node为/dev/sd. 我在应用程序中要打开sd卡,并且要在sd卡上创建目录或文件,请问在程序中应该如何调用? 比如说我程序中要在sd卡上创建一个目录test或文件test.txt,应该怎么调用?… 查看全部问答> |
|
将EE_FPGA V1.0 USB插到电脑上,提示要安装驱动,使用了C:\\altera\\91\\quartus\\drivers 无法正常安装。能帮我一下,传一个给我。 JTAG下载程序正常。… 查看全部问答> |
|
前两天看别的东西了,没来得及写,现在发上来,请看一下。问题如下:使用USART1发送一串数据(这里是30个),发送到不定个数量时(有时12,有时18,有时其他),会产生一个IDLE中断。main function: int main(void){#ifdef DE ...… 查看全部问答> |
|
德州仪器Mark McKeown 为您介绍C5000音频电容式触摸BoosterPack的使用体验。C5535超低功耗数字信号处理器BoosterPack是一款适用于MSP430TM微控制器LaunchPad开发套件的插入式电路板,同时也是德州仪器(TI)首款由为空气单独控制的DSP解决方案。Boo ...… 查看全部问答> |




