#include <reg51.h> 文件包含处理,为了使用P1 等更多符号#include <stdio.h> 有关标准输出,可以调用库函数#include <absacc.h> 可以使用其中定义的宏来访问绝对地址包括以下的XBYTE等 #define max_circuit 512 定义max_circuit为512 sbit busy = P3^5; busy接p3.5口sbit ack = P3^4; ack接P3.4口sbit strobe = P3^2; strobe接P3.2口 int idx_in; 定义 idx_inint i,j,k; 定义 i,j,k //Interruption caractere envoy?par PC input() interrupt 0 using 1 { 中断服务函数采用外中断0,工作寄存器组采用第一组 EX0= 0; 中断允许位为0,相应中断源中断屏蔽 busy= 1; ack= 0; XBYTE[idx_in] = P1; 将P1 放入idx_in代表的地址中去 idx_in ++; idx_in自加 1 if(idx_in == max_circuit) idx_in = 0; 如果idx_in等于max_circuit时则 idx_in 为0 ack= 1; busy= 0; EX0= 1; 中断允许位为1,INTO下降沿触发中断打开} //Initialisation de la liaison s閞ie void init_serial(void) { //DMX ?250kBauds DMX? 250kbps TMOD= 0x60; 工作方式寄存器(设置定时\计数器的工作方式)地址为0x60 SCON= 0x90; 串行口控制寄存器(用于串行数据的通信控制)地址为0x90 TI =0; 设置TMOD高四位TI为0} //Initialisation des variables void init_prg(void) { for(idx_in=0 ; idx_in<max_circuit; idx_in++) XBYTE[idx_in] = 0xAA; 令idx_in初始值为0,如果idx_in小于max_circuit,则idx_in自加1,循环,直到idx_in等于max_circuit,退出 idx_in = 0; idx_in为0 busy= 0; ack= 1; EX0= 1; 外中断EXO为1,中断打开 PX0= 0; 设置INT0中断优先级为低级优先 IT0= 1; EA =1; CPU中断允许位为1(总允许)} //G閚閞ation de la trame DMX void send_dmx() { 发送无类型指针dmx unsigned int count; 定义无符号整形变量名为count EX0= 0; 中断关闭 TB8= 0; 串行通信中发送的是数据帧 TXD= 1; //break TXD(移位脉冲)置1, // 跳出 TXD= 0; TXD(移位脉冲)置0 for(count=0 ; count<15 ; count++); //attente de 15 cycles d'horloge 令count初始值为0,当count小于15时count自加1,循环,直到count等于15时跳出(等待15个时钟周期) TXD= 1; TXD(移位脉冲)置0 for(count=0 ; count<2 ; count++); //attente de 2 cycles d'horloge令count初始值为0,当count小于2时count自加1,循环,直到count等于2时跳出(等待2个时钟周期) TB8= 1; //MAB 串行口发送地址帧 SBUF= 0x00; 启动串行口发送过程,发送0x00 while(!TI); 若TMOD高四位TI取反为真(即就是TI为0),执行下面语句 TI =0; TI为0 for(count=0 ; count<max_circuit ; count++){ 令count初始值为0,若count小于max_circuit ,则count自加1,循环,直到count等于max_circuit跳出 TB8 = 1; 串行口发送地址帧 SBUF = XBYTE[count]; 启动串行口发送过程,令SBUF等于count所代表地址 while(!TI); 若TMOD高四位TI取反为真,则执行下面语句 TI = 0; TI等于0 } TXD= 1; TXD(移位脉冲)置1 EX0= 1; 外中断INT0下降沿触发中断允许} //Programme principal 主要项目 void main (void) { 无类型 init_serial(); 初始化串口 init_prg(); 初始化prg while(1) { 若为1 send_dmx(); 发送dmx for (i=0;i<3;i++){ 令i初始值为0,当i小于3时i自加1,直到i等于3退出 for (j=0;j<255;j++){令j初始值为0,当i小于255时j自加1,直到i等于255退出 for(k=0;k<255;k++);令k初始值为0,当k小于255时j自加1,直到k等于255退出 } } }
|