/********************************************************************/
/********************************************************************/
///////////////////////////DMX512 decoder ////////////////////////////
//作者:俞少洪
//
//tools: keil c51 v:8.18
//
//20MHz 1Tmode =20MIPS 0.05us /1指令时间 定时器1产生波特率250Kb/s 4us
//
//T1 外部中断 T1 计时器16bit
//
//T0 AUXR T0*12 产生100HzPWM波,256级别 调光
//
//
//
//器件 STC12C5608AD
///////////////////////////////////////////////////////////////////////////////
//ver:1.0
//1、基本功能实现 2009.5.10
//ver:1.1
//1、修正PWM占空比不稳定问题 ,表现为低亮度时,会有闪烁。 1-10等级被屏蔽
//ver:1.2
//1、消除80us 干扰
//ver: 1.3 2009.6.11
//1、自变功能屏蔽
//2、PWM
//ver 2.0 器件 stc11F04E 转化成 stc12c5608AD test passing
//
//
//ver 3.0 芯片内PWM功能实现 PWM调光
//ver 3.1 RBG 自动流动 并且屏蔽写入地址功能段码
//ver 3.2 器件STC12C5604AD 32 脚封装
///////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <intrins.h>
#include "stc12c56.h"
//#include "AUTO.c"
#define uchar unsigned char
#define uint unsigned int
#define T0_TH0 0xFF-0x41 //0.05us*x=1/100Hz*256---->x=(1/100*256*0.05 )*10^6
#define T0_TL0 0xFF-0x41 //x= 781-->0x030D 100Hz up <--> x down
//0.6x=1/25600HZ
sbit LED =P2^3;
//sbit RED =P3^7;
//sbit GREEN =P3^5;
//sbit BLUE =P2^0;
sbit RE =P3^4;
//sbit INT0 =P3^2;
//位定义
uchar bdata bit_status;
//sbit addr_en =bit_status^0;
sbit AUTO =bit_status^1;
uchar data RGB[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};
#define TH1_INIT 0xFF-0x3C
#define TL1_INIT 0xFF-0x50
uint time80; // MARK 计时变量
uint frame=0;
uchar sbuf_data;
uint addr;
uint addr_ch=0xFFFF;
uchar addr_flag,i,j,temp;
uint dmx_ch;
uchar k=0; //pwm 256等级变量
uint INT1_TH0,INT1_TL0;
uint addr_ID;
uchar addr_data[]={0x00,0x00};//写地址过程变量 高位在前 addr_data[0]
uint led_data=0; //工作指示灯 LED
uchar led_bit=0;
void init_uart(void) ;
void init_int0(void) ;
void init_t0(void) ;
void auto_init_t1(void) ;
void init_pwm(void );
void led(void) ;
void isp_read() ;
void isp_write() ;
void isp_erase() ;
void isp_disable();
uchar byte_addr_high=0x00, byte_addr_low=0x00;
#define WAIT_TIME 0x02
#define ISPEN 0x80
#define isp_iap_byte_read 0x01
#define isp_iap_byte_write 0x02
#define isp_iap_sector_erase 0x03
uint n=0;
uchar m=0; //自变化过程变量
uint code S_RGB[]=
{
0,0,0,
155,0,0,
0,155,0,
0,0,155,
155,0,0,
0,155,0,
0,0,155,
} ;
//-----------------------------------------//
void main(void)
{
init_int0();
init_t0();
isp_read();
auto_init_t1();
init_pwm();
while(1)
{
// if(addr_en==1)
// {
// addr_en=0;
// isp_erase();
// isp_write();
// isp_read();
// }
// isp_read();
WDT_CONTR=0x3c;//喂狗
CCAP0H=RGB[1];
CCAP1H=RGB[2];
CCAP2H=RGB[3];
}
}
///////////////////////////////////////////////////
/*
void isp_write()
{
ISP_ADDRH =byte_addr_high;
ISP_ADDRL =byte_addr_low;
ISP_CONTR =WAIT_TIME|ISPEN;
ISP_CMD =isp_iap_byte_write;
ISP_DATA =addr_data[0];
ISP_TRIG =0x46;
ISP_TRIG =0xB9;
_nop_() ;
ISP_ADDRH =byte_addr_high;
ISP_ADDRL =byte_addr_low+1;
ISP_CONTR =WAIT_TIME|ISPEN;
ISP_CMD =isp_iap_byte_write;
ISP_DATA =addr_data[1];
ISP_TRIG =0x46;
ISP_TRIG =0xB9;
_nop_() ;
isp_disable();
}
*/
void isp_read()
{
byte_addr_low=0x00;
ISP_ADDRH =byte_addr_high;
ISP_ADDRL =byte_addr_low;
ISP_CONTR =WAIT_TIME|ISPEN;
ISP_CMD =isp_iap_byte_read;
ISP_TRIG =0x46;
ISP_TRIG =0xB9;
_nop_() ;
addr_ID =ISP_DATA;
ISP_ADDRH =byte_addr_high;
ISP_ADDRL =byte_addr_low+1;
ISP_CONTR =WAIT_TIME|ISPEN;
ISP_CMD =isp_iap_byte_read;
ISP_TRIG =0x46;
ISP_TRIG =0xB9;
_nop_() ;
addr_ID =addr_ID*256; //高位在前
addr_ID =addr_ID|ISP_DATA ;
isp_disable();
}
/*
void isp_erase()
{
ISP_ADDRH =byte_addr_high;
ISP_ADDRL =byte_addr_low;
ISP_CONTR =WAIT_TIME|ISPEN;
ISP_CMD =isp_iap_sector_erase;
ISP_TRIG =0x46;
ISP_TRIG =0xb9;
_nop_() ;
isp_disable();
}
*/
void isp_disable()
{
ISP_CONTR=0x00;
ISP_CMD =0x00;
ISP_TRIG=0x00;
ISP_ADDRH=0xFF;
ISP_ADDRL=0xFF;
}
///////////////////////////////////////////////////
void init_t0()
{
AUXR=0x40;
TMOD=(TMOD&0xF0)|0x02; //8bit
TH0=T0_TH0;
TL0=T0_TL0;
TR0=1;
ET0=1;
// IP=0x02;
// EA=1;
}
///////////////////////////////////////////////////
void auto_init_t1(void)
{
AUXR=0x40; // T1 计时器速度降下来 /12
TMOD=(TMOD&0x0F)|0x10; // 3932 us
TH1=0x00;
TL1=0x00;
TR1=1;
ET1=1;
EA=1;
// AUTO=1;
}
void init_int0()
{
RE=0;
IT0=0;//低电平触发
EX0=1;
EA=1;
}
void init_uart(void)
{
AUXR=0x40; //set T1*12=1 //AUXR //T0x12 T1x12 UART_M0x6 BRTR - BRTx12 XRAM S1BRS
// AUXR1=0x80; // 使用串口2通讯
TMOD=(TMOD&0x0F)|0x20;
PCON=PCON|0x80; //SMOD=1
TH1=256-5;
TL1=256-5; // Baud Rate =(K*Oscillator freq)/[32*12*[256–(TH1)]
TR1=1; // TH1=256-(K*OscFreq)/(384*BaudRate) K=1 if SMOD=0K=2 if SMOD=1
IP=0x10; //串口通讯中断 优先级高
SCON=0x50; //
ES=1;
EA=1;
RE=0; //P3.4 MAX13085 使能
}
/************外部中断0 **********************/
void int0(void) interrupt 0
{
EX0=0;
AUXR=0x40; //AUXR //T0x12 T1x12 UART_M0x6 BRTR - BRTx12 XRAM S1BRS
TMOD=(TMOD&0x0F)|0x10; //16bit T1
IP=0x02; // 解决80us 的干扰
TH1=0;
TL1=0;
ET1 = 0; // Enable T1 Interrupts
TR1 = 1; // Start Timer 1 Running
// led(); // Global Interrupt Enable
while (!INT0) //等待转高电平 //
{ // _nop_(); // 等待一个指令周期
}
TR1=0;
INT1_TL0=TL1;
INT1_TH0=TH1;
time80=INT1_TH0*256+TL1 ; //100us
if (time80>1800&&time80<2200) // 0x0708---0x07D0----0x0898
{
dmx_ch=0; //dmx_ch++
addr=addr_ID;
// addr=58;
addr_flag=0; //
j=0;
addr_ch=0;
init_uart(); //开启串口中断
// AUTO=0;
EX0=0;
}
else
{
EX0=1;
}
}
///////////////////////////////////
void uart_receive(void) interrupt 4
{
if(TI==1)
{
TI=0;
return;
}
if(RI==1)
{
led( ); //////LED闪烁指示灯
RI=0;
sbuf_data=SBUF ;
frame++;
if(frame==513) //接受
{
frame=0;
EX0=1;
ES=0;
addr_flag=0;
dmx_ch=0 ;
j=0;
}
if(addr_flag==0) //起始 BYTE
{
//写地址功能
/*
if(sbuf_data==0xcd)
{
j++;
RGB[j]=sbuf_data;
if(j==6)
{
addr_en=1;
addr_data[0] =(RGB[4]*RGB[5]-RGB[4])/256 ;
addr_data[1] =(RGB[5]*RGB[4]-RGB[4])%256;
EX0=1;
ES=0;
frame=0;
}
}
else
{
addr_ch=0xFFFF; ////////////////?????
addr_flag=1;
}
*/
addr_ch=0;
addr_flag=1;
}
else if(addr_flag==1)
{
addr_ch++; ///起始0
// if(addr_ch==0)
if(addr_ch==addr) //addr_ch=0 开始 到 511
{
addr_flag=2;
}
}
else if(addr_flag==2&&dmx_ch<=2) //&&逻辑与
{
j++ ;
RGB[j]=sbuf_data;
dmx_ch++ ;
}
else
{
addr_flag=3;
}
}
}
/////////////////////////////////////
////////
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
GL-12VD-3W-Hardware-地埋灯使用.7z (187个子文件)
GL-12VD-3W v1.0 14KB
CB-XQ-003_Uv2.Bak 2KB
CB-XQ-003_Opt.Bak 2KB
10-2_112.bin 4KB
23-3_271.bin 4KB
3-4_34.bin 4KB
12-4_142.bin 4KB
21-3_247.bin 4KB
22-1_253.bin 4KB
14-2_160.bin 4KB
20-4_238.bin 4KB
16-3_187.bin 4KB
11-2_124.bin 4KB
17-3_199.bin 4KB
12-3_139.bin 4KB
14-4_166.bin 4KB
7-2_76.bin 4KB
22-2_256.bin 4KB
10-1_109.bin 4KB
7-1_73.bin 4KB
11-1_121.bin 4KB
18-4_214.bin 4KB
1-1_1.bin 4KB
13-4_154.bin 4KB
6-2_64.bin 4KB
2-3_19.bin 4KB
15-1_169.bin 4KB
5-1_49.bin 4KB
10-4_118.bin 4KB
16-4_190.bin 4KB
18-1_205.bin 4KB
20-3_235.bin 4KB
8-2_88.bin 4KB
14-3_163.bin 4KB
23-4_274.bin 4KB
8-4_94.bin 4KB
9-2_100.bin 4KB
18-2_208.bin 4KB
7-3_79.bin 4KB
5-2_52.bin 4KB
24-2_280.bin 4KB
16-1_181.bin 4KB
7-4_82.bin 4KB
8-1_85.bin 4KB
6-1_61.bin 4KB
11-3_127.bin 4KB
17-1_193.bin 4KB
1-4_10.bin 4KB
15-3_175.bin 4KB
17-2_196.bin 4KB
2-1_13.bin 4KB
13-1_145.bin 4KB
19-2_220.bin 4KB
21-2_244.bin 4KB
3-3_31.bin 4KB
19-4_226.bin 4KB
12-2_136.bin 4KB
13-3_151.bin 4KB
20-1_229.bin 4KB
18-3_211.bin 4KB
11-4_130.bin 4KB
24-4_286.bin 4KB
19-3_223.bin 4KB
2-4_22.bin 4KB
9-3_103.bin 4KB
24-3_283.bin 4KB
21-4_250.bin 4KB
4-1_37.bin 4KB
22-4_262.bin 4KB
16-2_184.bin 4KB
9-1_97.bin 4KB
19-1_217.bin 4KB
21-1_241.bin 4KB
3-2_28.bin 4KB
22-3_259.bin 4KB
14-1_157.bin 4KB
4-3_43.bin 4KB
13-2_148.bin 4KB
15-2_172.bin 4KB
2-2_16.bin 4KB
6-3_67.bin 4KB
3-1_25.bin 4KB
1-3_7.bin 4KB
4-2_40.bin 4KB
8-3_91.bin 4KB
10-3_115.bin 4KB
6-4_70.bin 4KB
12-1_133.bin 4KB
9-4_106.bin 4KB
17-4_202.bin 4KB
5-3_55.bin 4KB
23-1_265.bin 4KB
15-4_178.bin 4KB
4-4_46.bin 4KB
23-2_268.bin 4KB
20-2_232.bin 4KB
1-2_4.bin 4KB
24-1_277.bin 4KB
39-3_463.bin 4KB
37-4_442.bin 4KB
共 187 条
- 1
- 2
资源评论
属鼠的金牛
- 粉丝: 87
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功