本帖最后由 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,请他也发上来
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
源码来了
115 {MOD}:
http://115.com/file/dpwwnt02
使用很简单:
1)在目标文件夹(例如: d:work)复制文件INC52.exe和INTERRUP.INC
2)运行INC52.exe
3)INC52.exe 会建立几个相关的文件, 如果要建立的文件已经存在,会提示是否复写
4)修改好相应的文件,然后运行c.bat
怎么啦,大家看到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为你做了所有的工作,你可以翻看源码,看他为你做了什么,怎么做
lz玩pc端编程熟练的话,倒是建议你做个keil插件,做成源码向导一样,,,,更好,
一周热门 更多>