/**************************************************/

/*** 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;

}

}


关键字:6通道  dmx512  控制器 引用地址:6通道dmx512控制器程序

上一篇:定时器功能演示程序
下一篇:T6963C控制器的液晶显示模块程序

推荐阅读

我们对2019年智能终端的变化期待已久——具体而言,大约从十年前就开始憧憬。在2019年,我们将看到顶级移动终端开始支持5G。当然,不止于此:我们还有望迎来人工智能(AI)、视频拍摄、续航、游戏和扩展现实(XR)体验上的巨大飞跃。 即将到来的新一年将成为具有变革意义的一年,它将为未来十年的移动体验奠定基础,而Qualcomm的突破性技术正在驱动这一变...
要用到stm8s105k6的内部128K低速时钟,调试不是蛮顺利,特此记录下。从内部16M时钟切换至内部128K时钟,配置如下:void Clk_Config(void){ CLK_CKDIVR= 0x00; //系统时钟 1 分频 while(!(CLK_ICKR & 0x02)); //等待 HSI 准备好 CLK_SWCR|=0x02; //开启切换 CLK_ICKR|=...
12月25日,上海证券交易所科创板上市审核中心发布关于终止对昆腾微电子股份有限公司首次公开发行股票并在科创板上市审核的决定。公告显示,2020 年 12 月 24 日,昆腾微和保荐人平安证券股份有限公司 分别向本所提交了《昆腾微电子股份有限公司关于撤回首次公开 发行股票并在科创板上市申请文件的申请》(昆腾微〔2020〕 5 号)和《关于撤回昆腾...
联想移动事业部总经理在微博上透露,该公司正在研发第三代Moto Razr翻盖可折叠智能手机。这位高管还透露,这款手机将配备“星轨转轴设计”技术,当智能手机展开时,它将有一块无缝的屏幕。此外,这款可折叠手机将配备更先进的芯片、更好的人机界面和更吸引人的外观。他还提供了设备关闭时的侧视图,以强调转轴设计的改进。摩托罗拉在2019年首次推出了Razr...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved