发送程序如下:
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
#define max_circuit 512
sbit busy = P3^5;
sbit ack = P3^4;
sbit strobe = P3^2;
int idx_in;
int i,j,k;
//Interruption caract鑢e envoy?par PC
input() interrupt 0 using 1 {
EX0 = 0;
busy = 1;
ack = 0;
XBYTE[idx_in] = P1;
idx_in ++;
if (idx_in == max_circuit) idx_in = 0;
ack = 1;
busy = 0;
EX0 = 1;
}
//Initialisation de la liaison s閞ie
void init_serial(void) {
//DMX ?250kBauds
TMOD = 0x60;
SCON = 0x90;
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;
busy = 0;
ack = 1;
EX0 = 1;
PX0 = 0;
IT0 = 1;
EA = 1;
}
//G閚閞ation de la trame DMX
void send_dmx() {
unsigned int count;
EX0 = 0;
TB8 = 0;
TXD = 1; //break
TXD = 0;
for (count=0 ; count<15 ; count++); //attente de 15 cycles d'horloge
TXD = 1;
for (count=0 ; count<2 ; count++); //attente de 2 cycles d'horloge
TB8 = 1; //MAB
SBUF = 0x00;
while (!TI);
TI = 0;
for (count=0 ; count<max_circuit ; count++){
TB8 = 1;
SBUF = XBYTE[count];
while(!TI);
TI = 0;
}
TXD = 1;
EX0 = 1;
}
//Programme principal
void main (void) {
init_serial();
init_prg();
while(1) {
send_dmx();
for (i=0;i<3;i++){
for (j=0;j<255;j++){
for(k=0;k<255;k++);
}
}
}
}
|