16级灰度护栏灯DMX512控制器程序

发布时间:2022-12-27  

/*硬件资源:

RAM ADDRESS :0000H---7FFFH

CF card ADDRESS:8000H---8FFFH

CPLD ADDRESS:9000H---FFFFH

RAM SIZE :32K FLASH SIZE:8MBYTE = 4K*512PAGE*4PCS

PCB:V10

*/

#include

#include

//#include //字符函数

#include //字符串函数

#include //一般I/O函数

#include //标准函数

//#include //数学函数

#include //绝对地址

#include //内部函数

#include

#define uchar unsigned char

#define uint unsigned int

#define byte unsigned char

#define ulong unsigned long

#define bool bit

#define TRUE 1

#define FALSE 0

#define V_TH0 0xff /* 时间常数高8位 (65536-500)/256 */

#define V_TL0 0xff /* 时间常数低8位 (65536-500)>256 11.0592*/

//#define V_TH0 (65536-1536)/256

//#define V_TL0 (65536-1536)>256

#define V_TMOD 0x01 /* 定时器T0方式控制字 */

#define WriteDeviceAddress 0xa0

#define ReadDviceAddress 0xa1

sfr CHPCON= 0xbf;

sfr CHPENR=0xf6;

sfr PMR= 0xC4;

sfr SBUF1=0xc1;

sfr SCON1=0xc0;

sbit SM01 = SCON1^7; /* alternative SM0_FE_1 */

sbit SM11 = SCON1^6; /* alternative SM1_1 */

sbit SM21 = SCON1^5; /* alternative SM2_1 */

sbit REN1 = SCON1^4; /* alternative REN_1 */

sbit TB81 = SCON1^3; /* alternative TB8_1 */

sbit RB81 = SCON1^2; /* alternative RB8_1 */

sbit TI1 = SCON1^1; /* alternative TI_1 */

sbit RI1 = SCON1^0; /* alternative RI_1 */

sbit ES1 = IE^6;

/* 定义定时器T0的时间常数值和方式控制字 */

#define REGL XBYTE[0x9003] //控制寄存器护栏管的长度

#define FPGH XBYTE[0x9001] //闪存页高位

#define FPGL XBYTE[0x9002] //闪存页低位

//-------- CF CARD REG ADDRESS

#define EVEN_Data XBYTE[0xa400]

#define ODD_Data XBYTE[0xa400]

#define Data_Reg XBYTE[0xa000] //DATA REGISTER(R/W)

#define Error_Reg XBYTE[0xa001] //ERROR REGISTER(READ)

#define Features XBYTE[0xa001] //FEATURE REGISTER(WRITE)

#define Sectr_Cnt XBYTE[0xa002]//SECTOR COUNT REGISTER(R/W)

#define Sectr_No XBYTE[0xa003] //SECTOR NUMBER REGISTER(R/W)

#define Cylinder_Low XBYTE[0xa004] //CYLINDER LOW REGISTER(R/W)

#define Cylinder_Hi XBYTE[0xa005] //CYLINDER HIGH REGISTER(R/W)

#define Drv_Head XBYTE[0xa006] //DIRVE/HEAD REGISTER(R/W)

#define Status XBYTE[0xa007] //STATUS REGISTER(READ)

#define Command XBYTE[0xa007] //COMMAND REGISTER(WRITE)

#define Alt_Status XBYTE[0xa00e] //Alternate Status Regiter(read only)

#define Device_Ctrl XBYTE[0xa00e] //Device Control Register(Write only)

#define Device_Addrs XBYTE[0xa00f] //Drive Address Register(read only).Not used in this demo

#define Config XBYTE[0x8200] //Configuration Option Register

#define Socket XBYTE[0x8206] //Socket and copy Register

//CF card All command code

#define ChkPwr 0xe5

#define Diagnostic 0x90

#define EraseSctr 0xc0

#define Format 0x50

#define Identify 0xec

#define Idle 0xe3

#define Idlelmm 0xe1

#define Initialize 0x91

#define ReadBuf 0xe4

#define ReadLong 0x22

#define ReadMulti 0xc4

#define ReadSctr 0x20

#define ReadVerify 0x40

#define Recalibrate 0x10

#define ReadSense 0x03

#define Seek 0x70

#define SetFeature 0xef

#define SetMulti 0xc6

#define Sleep 0xe6

#define Standby 0xe2

#define Standbylmm 0xe0

#define Translate 0x87

#define WearLevel 0xf5

#define WriteBuf 0xe8

#define WriteLong 0x32

#define WriteMulti 0xc5

#define WriteSctr 0x30

#define WriteVerify 0x3c

#define WrtMwoErase 0xcd

#define WrtSwoErase 0x38

#define debug 1;

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

sbit senden=P3^2;

sbit SDA=P3^3;

sbit SCL=P3^5;

sbit wdgclr=P1^7;

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

uchar Select;

uchar LBA[6]; //Sets up sector ,CF Card Address

uint zhepe; //帧频

uint ms; //毫秒定时

uchar ADD; //地址

uchar idata iic_buf[96]; //接收缓冲区

uint pointer;

uchar xdata *bufp;

uchar subchk; //接收指针 和校验

uchar paklen; //包长

uint Dcyli; //总柱面

uint Dhead; //总磁头

uint sec_track; //扇区/磁道

uchar bdata flag;

sbit frameok=flag^0; //rece ok

sbit color=flag^1; //0 sing red color 1 red green color

sbit rec_sta=flag^2; //1 进入接状态,不显示

sbit rec_end=flag^3;

sbit timout=flag^4;

//jmp_buf env;

//int retval;

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

void I2cDelay(unsigned int number) {

unsigned char temp;

for(;number!=0;number--,wdgclr=!wdgclr) {

for(temp=112;temp!=0;temp--) {

}

}

}

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

void SomeNOP(void)

{

uchar i;

i=5;

while(i--);

}

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

void Start() {

SDA=1;SomeNOP();

SCL=1;SomeNOP();

SDA=0;SomeNOP();

SCL=0;SomeNOP();

}

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

void Stop() {

SCL=0;SomeNOP();

SDA=0;SomeNOP();

SCL=1;SomeNOP();

SDA=1;SomeNOP();

}

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

void Ack() {

SDA=0;SomeNOP();

SCL=1;SomeNOP();

SCL=0;SomeNOP();

SDA=1;SomeNOP();

}

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

void NoAck() {

SDA=1;SomeNOP();

SCL=1;SomeNOP();

SCL=0;SomeNOP();

}

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

bit TestAck() {

bit ErrorBit;

SDA=1;SomeNOP();

SCL=1;SomeNOP();

ErrorBit=SDA;

SCL=0;

return(ErrorBit);

}

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

Write8Bit(unsigned char input)

{

unsigned char temp;

for(temp=8;temp!=0;temp--) {

SDA=(bit)(input&amt;0x80);

SCL=1;SomeNOP();

SCL=0;SomeNOP();

input=input<<1;

}

}

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

void Write24c02(unsigned char xdata *Wdata,unsigned char RomAddress,unsigned char number) {

wdgclr=!wdgclr;

Start();

Write8Bit(WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

for(;number!=0;number--) {

Write8Bit(*Wdata);

TestAck();

Wdata++;

}

Stop();

I2cDelay(10);

}

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

unsigned char Read8Bit() {

unsigned char temp,rbyte=0;

for(temp=8;temp!=0;temp--) {

SCL=1;

rbyte=rbyte<<1;

rbyte=rbyte|((unsigned char)(SDA));

SCL=0;

}

return(rbyte);

}

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

void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {

// unsigned char temp,rbyte;

wdgclr=!wdgclr;

Start();

Write8Bit(WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

Start();

Write8Bit(ReadDviceAddress);

TestAck();

while(bytes!=1) {

*RamAddress=Read8Bit();

Ack();

RamAddress++;

bytes--;

}

*RamAddress=Read8Bit();

NoAck();

Stop();

}

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

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>