8051外设全自动配置 (有源码的哟)

2020-02-04 09:13发布

本帖最后由 clkyui 于 2012-4-8 15:50 编辑

虽然8051及delphi已是昨日黄花,不过Delphi真的很优秀,8051用的人还很多。
在"ouravr"混了几年,莫元还是个位数,呵呵,有点不好意思。现在发个帖: 用Delphi写的8051外设 自动配置程序
是大家最喜欢的(带源码),大家可以根据自己的习惯,做出最得心应手的工具,
使用很简单: 在目标文件夹(例如: d:work)复制文件INC52.exe和INTERRUP.INC
解析下 INTERRUP.INC
#define Project_Name  line       //  专案名称(line) 如果是abc123 就改为#define Project_Name abc123
#define CPU           8032      
//CPU类型 一般是8032系列(有256字节内存,有T2) ,如果是8031类型(例如at89c51)  就改为#define CPU   8031
#define Crystal       12  //晶振频率: 12Mhz
#define MachineCycle  12  //机器周期 12T 如果STC11F 改为 #define MachineCycle 1

#define Uses_T0       1   //使用定时器T0 为1 ,不使用: #define Uses_T0   0
#define Timer0        50  //定时器T0定时时间 50 us(微秒)
#define Timer0_Manual 0   //定时器T0手动装载定时值(TL0,TH0)
#define T0_Priority   0   ////定时器T0中断优先

...  以下的就不用我啰嗦了

如果 CPU类型是8032  使用了Uart(#define Uses_Uart 1) 没有使用T2(#define Uses_T2 0),程序优先使用T2作为Uart的波特率发生器
否则使用T1,如果T1,T2,Uart都使用的话,那不用我废话了,只能错误侍候

后话: 这个程序已经是8年前的概念了,而且我只实现了8031,8032,还有其他的CPU大家可以一一实现,有赖Delphi完美的
物件导向支持,实现过程不用从头做起,哎发帖不容易, 有2个愿望(是不是有点贪心?) 1有个裤子,
2要是大家实现了其他CPU,请他也发上来

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
clkyui
1楼-- · 2020-02-04 11:00
本帖最后由 clkyui 于 2012-4-8 15:55 编辑

源码来了

115 {MOD}:
http://115.com/file/dpwwnt02
rclong
2楼-- · 2020-02-04 14:55
 精彩回答 2  元偷偷看……
clkyui
3楼-- · 2020-02-04 15:45
哎哟,原来我还没说完
使用很简单:
1)在目标文件夹(例如: d:work)复制文件INC52.exe和INTERRUP.INC
2)运行INC52.exe
3)INC52.exe 会建立几个相关的文件, 如果要建立的文件已经存在,会提示是否复写
4)修改好相应的文件,然后运行c.bat
clkyui
4楼-- · 2020-02-04 16:45
本帖最后由 clkyui 于 2012-4-8 14:46 编辑

怎么啦,大家看到51单片机就没兴趣 , 我详细说说用法:  就2步
1)修改 INTERRUP.INC  如下:
#define Project_Name  line
#define CPU           8032
#define Crystal       12
#define MachineCycle  12

#define Uses_T0       1        //使用T0
#define Timer0        50       //T0延时50us
#define Timer0_Manual 0        //使用自动常量装载 (对应T0模式0)
#define T0_Priority   0        //T0中断优先级0 (可为1)

#define Uses_T1       1         //使用T1
#define Timer1        20*1000   //T1延时20*1000(微秒) =20ms
#define Timer1_Manual 1         //使用手动常量装载 (对应T0模式1)
#define T1_Priority   0         //T1中断优先级0 (可为1)

#define Uses_Uart     1         //使用Uart(串口)
#define Uart_BPS      9600      //Uart(串口)波特率 = 9600bps
#define Uart_BIT      8         //通讯位数 =8
#define Uart_Priority 0         //Uart中断优先级0 (可为1)

注意 // 后面的只是详细说明,预编译时是没有的  
就象这样:
#define Uses_T0       1
#define Timer0        50
#define Timer0_Manual 0
#define T0_Priority   0

2)运行程序 inc52.exe
程序根据  INTERRUP.INC 设置, 自动计算所有相关的寄存器的值
建立以下文件
<1> line.fun  中断函数文件
static void uses_UART(void) interrupt 4
{
// Uart SET at 9600 BPS  8 bit  work at 9615.38 BPS  Error: 0.16%
if(RI) {
   RI=0;
  // 你的代码
       }
if(TI) {
   TI=0;
  // 你的代码
       }
}

static void uses_T0(void) interrupt 1
{
// Timer0=50 uS(微秒)  work in Auto load mode
  // 你的代码
}

static void uses_T1(void) interrupt 3
{
// Timer1=20,000 uS(微秒)  work in manual load mode
TR1=0;
TH1=0xB1;
TL1=0xE0;
  // 你的代码
TR1=1;
}

<2> line.rom 寄存器自动设置文件 该文件无需任何修改,你知道就行了
<3> line.c  方案框架文件

//  CPU: 8032  12 MHz   12 clock
#pragma symbols
#pragma debug
#define CPU 8032
#define CPU_C51 1
#define MachineCycle 12
#include "At89x52.H"
#include "my_bit.inc"
// #include "line_inc.H"
#include "line.fun"
void main(void)
{
  #include "line.rom"

  while(1) {
            // 你的代码
           }
}
<4> c.bat 自动编译文件 , 当修改好相关的文件后, 执行该批处理文件,就能编译程序
d:inc521.jpg
你无需翻手册,无需计算任何数值,inc52.exe为你做了所有的工作,你可以翻看源码,看他为你做了什么,怎么做
jetli
5楼-- · 2020-02-04 21:04
感谢lz的辛勤劳动,,,

lz玩pc端编程熟练的话,倒是建议你做个keil插件,做成源码向导一样,,,,更好
qlasamour
6楼-- · 2020-02-04 21:05
看样子,好像不错,我还是用keil

一周热门 更多>