历史上的今天
返回首页

历史上的今天

今天是: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;

}

}


推荐阅读

史海拾趣

Black Box Corporation公司的发展小趣事

为了进一步扩大市场份额,Black Box积极寻求与全球各地的企业合作。通过与跨国公司的战略合作,Black Box不仅获得了先进的技术和管理经验,还成功打开了多个国际市场。同时,公司也在全球范围内设立了多个分公司和办事处,以便更好地服务当地客户。这一系列的全球扩张行动使Black Box成为了真正意义上的国际企业。

Amerace Electronic Components公司的发展小趣事

为了确保产品质量和客户满意度,Amerace Electronic Components公司建立了严格的质量管理体系。公司引进了先进的生产设备和技术,并对生产过程进行严格的监控和管理。同时,Amerace还注重员工培训和技能提升,确保员工具备高度的专业素养和责任意识。这些措施使得Amerace的产品质量得到了有效保障,赢得了客户的信任和支持。

ASPEED Technology公司的发展小趣事

ASPEED的AST2600 BMC与瑞萨电子的I3C器件相结合,为客户提供了设计便捷、带宽增强且系统成本优化的解决方案。这一合作不仅展示了ASPEED在服务器管理领域的实力,还进一步推动了DDR5解决方案对I3C标准的推广使用。通过双方的努力,共同客户在实现向全新高速总线接口飞跃发展的过程中,获得了更加信心满满的设计体验。

EREM公司的发展小趣事

近年来,随着科技的快速发展和电子行业的变革,EREM公司也面临着巨大的挑战。为了应对这些变革,EREM积极调整战略方向,加大研发投入,推出了一系列符合市场需求的新产品。同时,EREM还注重人才培养和团队建设,打造了一支高效、专业的团队,为公司的发展提供了有力保障。

超音(CY)公司的发展小趣事

为了进一步提升品牌影响力,超音开始积极拓展国际市场。公司参加了多个国际展会,与国际知名音频设备厂商建立了合作关系。同时,超音还加强了与国际市场的沟通和交流,了解不同地区的消费者需求,针对性地推出符合当地市场需求的产品。这些努力使得超音在国际市场上的知名度不断提升,产品销量也稳步增长。

Blue Creation公司的发展小趣事

Blue Creation公司深知人才是企业发展的核心。因此,公司高度重视人才队伍建设,通过校园招聘、社会招聘等多种渠道吸引优秀人才加入。同时,公司还建立了完善的培训体系,为员工提供持续的学习和发展机会。这些举措使得Blue Creation拥有一支高素质、专业化的人才队伍,为公司的快速发展提供了有力保障。

问答坊 | AI 解惑

C语言降龙十八掌——第五掌 布尔类型是什么类型?

C语言降龙十八掌——第五掌布尔类型是什么类型? 大家看一看,这段代码有什么问题? ...... char*buffer; /*Allocate memory with function of standard lib */ buffer =malloc (SIZE_OF_BUF); /* Checkif the memory allocate s ...…

查看全部问答>

智林板例程出现error: #136错误的解决办法

智林板以其不用库,开发上手快著称,销往美国,英国,韩国,日本,香港,台湾,越南,新加坡。。。 但有许多人用智林的例程确编译通不过。出现了   STM32_Init.c(4072): error:  #136: struct \"<unnam ...…

查看全部问答>

WindML启动黑屏

环境为Tornado2.2.1和VxWorks5.5和Tilcon5.4 现在在运行Tilcon的时候,目标服务器上只显示Tilcon的License,而没有twd文件,然后就是黑屏,TRT_Start返回-1 不管我如何重装,重新编译Bootrom和WindML和镜像,都没有用,更换了几款鼠标和显卡,问题依旧! ...…

查看全部问答>

如何在应用程序中操作sd卡

我的设备驱动已经编译到内核里了,并且创建了设备的node为/dev/sd. 我在应用程序中要打开sd卡,并且要在sd卡上创建目录或文件,请问在程序中应该如何调用? 比如说我程序中要在sd卡上创建一个目录test或文件test.txt,应该怎么调用?…

查看全部问答>

关于TI LM3S8962开发板从外部去电问题

是不是可以将外接的5V电压加在双排真引出的5V~GND之间给开发板供电?还是只能用USB取电? 我看原理图没有看明白!~ 急!~…

查看全部问答>

EE_FPGA V1.0 驱动

将EE_FPGA V1.0 USB插到电脑上,提示要安装驱动,使用了C:\\altera\\91\\quartus\\drivers 无法正常安装。能帮我一下,传一个给我。 JTAG下载程序正常。…

查看全部问答>

浪淘沙请进,关于USART发送时出现IDLE中断

前两天看别的东西了,没来得及写,现在发上来,请看一下。问题如下:使用USART1发送一串数据(这里是30个),发送到不定个数量时(有时12,有时18,有时其他),会产生一个IDLE中断。main function: int main(void){#ifdef DE ...…

查看全部问答>

C5000音频电容式触摸BoosterPack快速入门演示

德州仪器Mark McKeown 为您介绍C5000音频电容式触摸BoosterPack的使用体验。C5535超低功耗数字信号处理器BoosterPack是一款适用于MSP430TM微控制器LaunchPad开发套件的插入式电路板,同时也是德州仪器(TI)首款由为空气单独控制的DSP解决方案。Boo ...…

查看全部问答>

推荐一本书

初学单片机不久,总是感觉光看手册还是有点晦涩难懂,前不久换avr学了,手头借了好多的书,每一个模块都会参照不同的书看,总结下来觉得ATmega128原理与开发应用指南这本书确实写的很用心。不同于其他的书只是照抄手册。这里仅仅推荐给和我一样的初 ...…

查看全部问答>