找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2423|回复: 2
打印 上一主题 下一主题
收起左侧

程序指正与分析!!!求大神看看此程序输出是什么,如何给程序里加载更多的控制程序!

[复制链接]
跳转到指定楼层
楼主
ID:65444 发表于 2014-9-2 11:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5黑币
#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退出                         }               }        }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65444 发表于 2014-9-2 11:47 | 只看该作者
此为原程序,不知道为啥编辑出来为啥会是那样。。。。




#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 caractere 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++);
                        }
                }
        }
}

回复

使用道具 举报

板凳
ID:1 发表于 2014-9-2 13:54 | 只看该作者
用ie或者谷歌浏览器打开,  编辑一下主题就好了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表