软件模拟串口程序

软件模拟串口程序
软件模拟串口程序

软件模拟串口程序

作者: coldra

环境:winAVR

M48,8MHz

9600,1,8,1

输出:用定时器控制普通IO口输出位

输入:用外部中断+定时器,判断位的宽度

好几天没休息好了,利用闲暇写的,也没找到别人的参考程序,不过终于算是可以工作了,其实还应该有很多其它的方法可以试一下,比如用PWM输出串行数据,用输入捕获接收数据,或定时查询,或用任意一个IO口中断,则每个引脚都有可能

现在还有些问题,全双工同时收发时发送偶尔出错,别的中断干扰所致吧,占用两个定时器有些浪费,以后再修改吧,最好加上各种波率。软件串口终究不如原串口好用,不过要求不苛刻的话可以一用,如果波特率改到4800应该会稳定许多

本程序为直接摘出部分,删了无关的部分,在此可能有些变量没用,或有段落遗漏,请谅

#i nclude

#i nclude

#i nclude

#i nclude

#define Sbit1() PORTD|=1<

#define Sbit0() PORTD&=~(1<

volatile unsigned int

eep_ms,//毫秒计时

keytime, //等待时间

SoundOnTime; ////

volatile unsigned char

rdata,

key,

start=0,

keycode, //

*TxPoint,

rtime,

INT0_time, //中断次数

RxLength=0, //接收长度

RUDR, //摸拟串口接收的数据

TxLength, //串口发送数据长度

SUDR; //串口发送的数据

unsigned char arr[10],DispBuff[10];

void Initial_IO(void)//IO口初始化

{

DDRD = 0X82; //PD1串口输出,PD0串口输入,PD2模拟串口输入(INT0)

PORTD = 0X82; //PD1输出高电平

}

void Initial_INT0(void)

{

EICRA|=(1<

EIMSK|=1<

}

void Initial_timer0(void) //定时器0初始化

{

TCCR0B|=(1<

}

void Initial_timer1(void)

{

TCCR1A=(1<

TCCR1B=(1<

ICR1=1000;

TIMSK1|=(1<

}

void Initial_timer2(void)

{

TCCR2B=(1<

TIMSK2|=(1<

}

void Initial_WDR(void) //看门狗初始化{

wdt_enable(WDTO_1S);

wdt_reset();

}

void Initial(void)

{

Initial_IO();

Initial_timer0();

Initial_timer1();

Initial_timer2();

Initial_INT0();

Initial_WDR();

sei();

}

/*启动串口发送*/

void SendData(unsigned char *P,unsigned char DataLength)

{

TxLength=DataLength;

TxPoint=P;

start=0;

}

int main (void)

{

Initial();

while(1)

{

wdt_reset();

if((rdata)&&(eep_ms>10))//收到数据延时10mS后启动发送,回送验证数据{

key=0;

SendData(&DispBuff[0],9);//发送DispBuff[0]的9位数据

while(TxLength);//等待发送完成

rdata=0;

eep_ms=0;

}

}

}

/*定时器0,100us溢出中断*/

SIGNAL(SIG_OVERFLOW0)

{

TCNT0=151;//重载数据,计时区间为151---255,共104uS,一个位的时间

if(TxLength)//

{

if(start==0)

{

Sbit0();//起始位

SUDR=*(TxPoint++);

}

else

{

if((start<=8))

{

if(SUDR&(1<<(start-1)))Sbit1();//数据1

else Sbit0();//数据0

}

else Sbit1();//停止位

}

if(start<10)start++;

else

{

TxLength--;//一字节发送完成,字节数减1

start=0;

}//

}

}

/*定时器1,1ms溢出中断*/

SIGNAL(SIG_OVERFLOW1)

{

eep_ms++;

}

/*定时器2*/

SIGNAL(SIG_OVERFLOW2)

{

sei();

if(INT0_time)//有数据

{

INT0_time=0;//中断次数清0

rdata=1;//置有数据标志

eep_ms=0;

if(RxLength<10)DispBuff[RxLength++]=RUDR;

}

if(rtime<4)rtime++;//字节间隔时间,间隔3个字节重新开始一帧 else RxLength=0;

}

SIGNAL(SIG_INTERRUPT0)//INT0,边沿触发中断

{

unsigned char temp,temp2=0;

static unsigned char pre_TCNT2,j=0;

if(INT0_time==0)//一个字节第一个下降沿中断,起始位开始

{

TCNT2=130;

pre_TCNT2=130;

RUDR=0xff;//接收的数据初值

j=0; //位数清零

INT0_time++;//中断次数加一

}

else

{

temp=TCNT2;

if(temp>pre_TCNT2)temp2=temp-pre_TCNT2;//取一个高/低电平的宽度 if(temp2>10)//滤过窄电平(干扰信号)

{

pre_TCNT2=temp;//记录前一次的时间值

temp=0;

while(temp2>13)//计算位的个数,约13为一个位(8*13=104uS)

{

temp2-=13;//

temp++;

}

if(temp2>6)temp++;//计算位的个数,一般13为一个位

if(INT0_time==1)temp-=1;

if(INT0_time&1)//奇数次中断

{

while(temp)//位0的个数

{

RUDR&=~(1<

temp--;

j++;

}

}

else j+=temp;//偶数,位1的个数,跳过

INT0_time++;//中断次数加一

}

}

rtime=0;

}

KEIL中如何用虚拟串口调试串口程序

KEIL中如何用虚拟串口调试串口程序 发表于2008/5/7 15:30:22 以前没接触过串口,一直都以为串口很复杂。最近在做一个新项目,用单片机控制GSM模块。单片机和GSM模块接口就是串口。调试完后觉得串口其实很简单。“不过如此”。这可能是工程师做完一个项目后的共同心态吧。下面详细介绍下如何用虚拟串口调试串口发送接收程序。 需要用到三个软件:KEIL,VSPD XP5(virtual serial ports driver xp5.1虚拟串口软件),串口调试助手。 1、首先在KEIL里编译写好的程序。 2、打开VSPD,界面如下图所示: 左边栏最上面的是电脑自带的物理串口。点右边的add pair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。 3、接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL 绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入MODE COM3 4800,0,8,1(设置串口3的波特率、奇偶校验位、数据位、停止位,打开COM3串口,注意设置的波特率和程序里设置的波特率应该一样)ASSIGN COM3 SOUT(把单片机的串口和COM3绑定到一起。因为我用的单片机是AT892051,只有一个串口,所以用SIN,SOUT,如果单片机有几个串口,可以选择S0IN,S0OUT,S1IN,S1OUT。)

4、打开串口调试助手 可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率4800,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。 现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。这种方法的好处是不用硬件就可以调试。这是网上一篇文章介绍的方法,联系我实际的使用做了整理。有用的着的人就不用继续摸索了

法学虚拟仿真教学软件(系统)推荐

法学虚拟仿真教学软件(系统)推荐 虚拟仿真实验教学是指依托虚拟现实、多媒体、人机交互、数据库和网络通讯等信息技术,构建高度仿真的虚拟实验环境和实验对象,让学生在虚拟环境中开展实验,达到教学大纲所要求的教学效果的一种实验教学模式。对于传统的文科性法学专业而言,技术信息的快速发展也带来了一定的发展机遇和挑战。如何通过更为丰富的手段强化法学专业学生的实战能力,提高实务经验是摆在每个法学专业院校面前的十分严峻的任务。通过虚拟仿真技术手段,不仅可以有效改变传统教学所带来的机械、抽象和程式化的教学效果,同时借助于软件技术手段形成的具有自主知识产权的虚拟实验项目,将为本院校的综合教学和科研实力带来更高的发展平台。 教育部要求各高校应将建设和使用虚拟仿真实验教学项目作为推进完善现有实践教学体系、提高实验教学质量的重要举措。加大对实验教学队伍的培养培训,着力提升信息技术与实验教学深度融合的意识、使用信息技术改造传统实验教学项目的能力和水平。根据实验教学计划和实际情况,在坚持“能实不虚”的基础上加大虚拟仿真实验教学项目建设力度,探索线上线下教学相结合的新型实验教学模式。加强对虚拟仿真实验教学项目应用管理,建立健全适应网络化学习的实验教学成绩考核评价指标体系,促进实验教学质量稳步提高。 教育部的总体规划,引导了法学专业虚拟仿真实验项目建设的方向,也为各高校开展法学虚拟仿真实验项目建设带来了发展契机。但是毋庸置疑,如何建设适合本学校本专业特色的虚拟仿真实验项目,教育部并没有提供可行的蓝本和具体路径。例如选择什么形式的虚拟仿真实验项目课题?如何吸收和发挥本校的专业优势和特色?选择哪一个切入点进行虚拟仿真实验项目设计?相关的硬件需要哪些指标性要求?如何选择适用配套的软件?如何将动画或3D技术嵌入到具体的虚拟仿真实验项目?为了实现本公司面向各大高校提供法学专业教学服务的宗旨,本公司结合多年来与各大高校的合作经验,认真研究了法学专业建设虚拟仿真实验项目的可行性模式以及相关的硬件和软件建设方法,为本公司服务用户提供具有一定参考意义的法学虚拟仿真实验项目设计方案。 杭州法源软件开发有限公司是业界良好的高校教学软件和解决方案供应商,专注法学专业;是目前法学领域内专业成熟的法学实践教学软件研发团队;凭借

单片机模拟串口

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51系列只提供一个串口,那么另一个串口只能靠程序模拟。 本文所说的模拟串口,就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置1,各种数据位和校验位则根据情况置1或置0。至于串口通信的波特率,说到底只是每位电平持续的时间,波特率越高,持续的时间越短。如波特率为9600BPS,即每一位传送时间为1000ms/9600=0.104ms,即位与位之间的延时为为0.104毫秒。单片机的延时是通过执行若干条指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的,单片机常用11.0592M的的晶振,现在我要告诉你这个奇怪数字的来历。用此频率则每个指令周期的时间为(12/11.0592)us,那么波特率为9600BPS每位要间融多少个指令周期呢?指令周期s=(1000000/9600)/(12/11.0592)=96,刚好为一整数,如果为4800BPS则为96x2=192,如为19200BPS则为48,别的波特率就不算了,都刚好为整数个指令周期,妙吧。至于别的晶振频率大家自已去算吧。现在就以11.0592M的晶振为例,谈谈三种模拟串口的方法。 方法一:延时法 通过上述计算大家知道,串口的每位需延时0.104秒,中间可执行96个指令周期。 #define uchar unsigned char sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; #define RXD P1_0 #define TXD P1_1 #define WRDYN 44 //写延时 #define RDDYN 43 //读延时 //往串口写一个字节 void WByte(uchar input) { uchar i=8; TXD=(bit)0; //发送启始 位 Delay2cp(39); //发送8位数据位 while(i--) { TXD=(bit)(input&0x01); //先传低位 Delay2cp(36); input=input>>1; } //发送校验位(无)

用单片机普通I_O口模拟串口的一种方法

电子报/2005年/12月/18日/第011版 单片机应用 用单片机普通I/O口模拟串口的一种方法 南昌李春玲 MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD (P3.0)和TXD(P3.1)与外设进行全双工的串行异步通信。串行端口有四种基本工作方式:方式0主要用于外接移位寄存器,以扩展单片机的I/O接口;方式1多用于双机之间或与外设的通信;方式2、方式3除有方式1的功能外,还可用作主从式多机通信,构成分布式多机系统。 在应用系统中,若需要多个串口,且各串口工作方式要求不同,如:通信波特率不一样,通常的方法是扩展一片可编程串行接口芯片,如8251或8250,但这样增加了硬件开销,且需要占用较多的I/O资源。本文介绍一种用单片机普通I/O口模拟串口的方法。 以A、B两个单片机之间的串行通信为例,电路如图1所示。使用了P1口中的3条普通I/O口,其中P1.0为串行发送端(模拟TXD),P1.1为串行接收端(模拟RXD),P1.2作为对方单片机的中断申请信号INTO的输入线(模拟内部串行口中断源RI/TI)。 串行通信信息帧的发送与接收由软件编程实现。工作过程如下(以A机发送、B机接收为例): 1.A机从P1.2口输出中断申请信号。 2.A机通过P1.0口发送一帧模拟信息。串行通信采用异步传送格式:包括1位起始位(低电平)、7或8位数据编码、1位奇偶校验位(可不要)、1位停止位(高电平)。串行通信中,如果数据传送的波特率为1200bps,则每位信息维持时间为0.833ms。 程序段TTXD完成上述发送功能。信息帧为10位(1位起始位、8位数据编码、无奇偶校验位、1位停止位)。 3.B机接收到INTO的中断申请信号后,自动进入中断服务程序,同步进行模拟异步接收。当P1.1口从高变低时,说明一帧开始,然后依次接收8位数据编码,采样数据在每一位的中间进行,故接收与发送要错开半位,最后检测到高电平后,跳出中断。一次中断完成一帧信息的接收,获得一个字节的数据。 INTO的中断服务程序段RRXD完成上述接收功能。 程序清单如下: TTXD:MOV A,#DATA;发送字节送A CLR P1.2;送中断申请信号 SETB P1.0 LCALL DELAY417

第二包汽车仿真教学软件

第二包:汽车仿真教学软件 1、模块组成: 应包括电控发动机、自动变速器、底盘系统、电气系统、汽车常规维护、车载网络系统等模块。 2、功能要求: (1)能够完整展示汽车发动机、底盘和电气系统各总成及零部件结构; (2)能够交互式演示汽车发动机、底盘和电气系统的基本工作过程; (3)能够交互式演示汽车常规维护的基本工艺流程; (4)能够完整展示汽车车载网络系统的组成、原理及检修方法。 3、技术要求: (1)网络版,采用C/S架构; (2)结构展示应采用3D表达,原理演示采用交互式动画进行表达; (3)所有模块都须提供单机版供离线使用; (4)发动机系统模块要求至少具备2种类型,包括电控汽油机和电控柴油机;应至少提供直列4缸和V型6缸电控汽油机各一款,SDI和TDI电控柴油机各一款; (5)底盘系统模块须具备手动变速器、自动变速器、制动系统和转向与悬架四个部分内容;应至少提供二种以上主流车型的自动变速器、ABS系统(包括ABS和ABS+EBD)、助力转向系统(包括液压动力转向和电动助力转向)、悬架(包括麦式悬架、多连杆悬架和电控悬架); (6)电气系统模块要求包含起动、充电、照明、防盗、雨刮、电动车窗、安全气囊等模块;应具备两种以上主流车型的空调系统(包括手动空调和自动空调); (7)所有模块必须进行现场演示。

附件二: 1、模块组成: 应包括汽车二级维护虚拟实训、总成拆装虚拟实训、故障诊断虚拟实训、车身测量虚拟实训等模块。 2、二级维护虚拟实训模块功能要求: (1)能够对维护车辆设置常见故障点50以上; (2)具备工具使用功能; (3)实训过程能够随时查阅各种资料;(4)具备填写检测结果的功能; (5)具备实训过程中操作自动记录功能。 3、总成拆装虚拟实训模块功能要求: (1)能够实现丰田8A发动机拆装实训功能; (2)具备总成大修功能,包括总成分解、零部件清洁和检查、重新组装等;(3)具备零部件检验功能,可对拆卸后的零部件进行测量检验; (4)提供各种工具使用功能; (5)具有对实训过程中操作进行记录的功能。 4、故障诊断虚拟实训模块功能要求: (1)具备故障诊断实训示范和实训练习功能; (2)具备两种故障点设置功能,包括随机设置和人工设置; (3)软件应具备模拟路试功能,在路试时可读取故障码和动态数据流; (4)能够模拟诊断仪读取故障码、读取定格数据、读取动态数据和主动测试,模拟示波器检测各种信号波形,模拟尾气分析仪检测不同工况下的尾气数据,模拟燃油压力表检测燃油系统压力,模拟气缸压力表检测各个气缸的压力,模拟真空表检测进气歧管的真空度,模拟万用表检测电阻和电压; (5)软件具备实训过程操作记录功能,可自动记录或手动记录; (6)具备常用工具使用功能; (7)软件应支持环境参数设置,包括环境温度、大气压力、机油液位、发动机冷却液液位等。 5、车身测量虚拟实训模块功能要求: (1)采用卡尔拉德车身测量系统; (2)提供20个以上测量点; (3)配置向导操作模式功能,可以引导用户按照汽车车身测量的标准工作流程进行操作。 6、各系统虚拟实训模块技术要求: (1)网络版,采用C/S架构; (2)实训车间场景采用3D实时渲染技术,可实现场景内360度旋转; (3)维护实训内容涵盖汽车二级维护的全部作业项目; (4)软件能够模拟汽车运行时的各种声音,包括发动机起动、怠速运转、加速、运行粗暴、运行抖动等; (5)总成拆装台架采用3D技术,可以进行360度方向任意翻转;( 6)支持单点故障设置和多点故障设置,多点故障设置每次可设置3个以上故障点; (7)故障点要求涵盖电路断路/短路、器件损坏、间歇性断路和机械故障等;(8)故障诊断模块能够设置常见故障点80个以上;

单片机IO口模拟串口程序(发送+接收)

前一阵一直在做单片机的程序, 由于串口不够,需要用10 口来模拟出一个串口。 经过若干曲 折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总 结的部分 贴出来。 程序硬件平台:11.0592M 晶振,STC 单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用 P2.1作为发送端 * 把单片机中存放的数据通过 P2.1作为串口 TXD 发送出去 ***************************************************************/ #in elude #i nclude #in clude typedef unsigned char uchar; int i; uchar code in fo[]= { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5 5 }; // SCON: serail mode 1,8-bit UART // T0工作在方式1,十六位定时 // SMOD=1; 0xFE; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=11.0592MHz TL0 = 0x7F; II 2400bps fosc=11.0592MHz II TH0 = 0xFD; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率 为 2400bps fosc=18.432MHz II TL0 = 0x7F; II 定时器0初始值,延时417us ,目的是令模拟串口的波特率为 2400bps fosc=18.432MHz } void WaitTF0( void ) { sbit n ewTXD = P2A 1; 〃模拟串口的发送端设为 P2.1 void Uartlnit() { SCON = 0x50; TMOD |= 0x21; PCON |= 0x80; TH0 定时器0初始值,延时417us ,目的是令模拟串口的波特率为

STC单片机虚拟串口发送程序(超简单)

STC单片机(STC12C5A32S)虚拟串口发送程序 //虚拟串口发送子函数 void Uart(uint8 a) { ACC=a; //TXD3是已经定义的任意的发送端口 TR1=1; TXD3=0; //发送起始位 while(TF1==0); TF1=0; //TF1必须清零,因为只有启用T1中断才会自动清零 TXD3=ACC0; //发送8个位也可以用移位来发送,ACC0-ACC7也必须先定义 while(TF1==0); //表示ACC的8个位,如果用移位发送,就不用这样定义。 TF1=0; TXD3=ACC1; while(TF1==0); TF1=0; TXD3=ACC2; while(TF1==0); TF1=0; TXD3=ACC3; while(TF1==0); TF1=0; TXD3=ACC4; while(TF1==0); TF1=0; TXD3=ACC5; while(TF1==0); TF1=0; TXD3=ACC6; while(TF1==0); TF1=0; TXD3=ACC7; while(TF1==0); TF1=0; TXD3=1; //发送停止位 while(TF1==0); TF1=0; TR1=0; } 该子函数使用T1定时器,T0也可以。采用8位自动重装,重装值为A0 Main() { TMOD = 0x21; //T0:模式1,16位定时器。T1:模式2,8位定时器,自动重装AUXR &= 0x3f; //定时器0和定时器1与普通8051定时器一样(不同的单片机设置可能

不同) TL1 = 0xa0; //虚拟串口波特率:9600 TH1 = 0xa0; ET0 = 1; ET1 = 0; //T1中断一定不要使用,要不接收会错误 TR0 = 1; TR1 = 0; Uart(0xaa); //0xaa是发送的数据,如果接收有误,在发送一个字节后可加点延时//延时 While(1); //具体程序此处省略 } 注:因本人实验的硬件不需要模拟串口来接收数据,故没给出虚拟串口接收程序。 以上程序已验证成功。

企业营运管理仿真模拟教学软件TOPBOSS简介

企业营运管理仿真模拟教学软件T O P B O S S简介Last revision on 21 December 2020

企业营运管理仿真模拟教学软件(TOP-BOSS)简介 如何让学生缩小所学营销理论与实务间的诸多差距; 如何让学生学会进行市场调查、信息收集、市场预测及市场分析; 如何让学生学会在企业不同部门、岗位之间的工作协调能力与沟通技巧; 如何让学生亲身感受现实环境中竞争的残酷性和科学有效管理的重要性; 如何让学生理解评估内部资源与透彻分析外部环境对制订战略的重要影响; 如何让学生能就各种不同的营销案例进行分析、研究并写出高质量的报告; 如何让学生客观的看到自己的优势与不足,懂得理性的去选择职业和岗位。 BOSS仿真模拟教学软件会给出所有答案: 1. 项目内容: 企业营运管理仿真模拟教学软件(简称TOP- BOSS软件),是在参照世界各名牌大学的管理类学科的实验教学模式,累积了30多位优秀教授们的智慧结晶,吸收各方面的管理类学科教学实践经验,研究开发的专门用于企业管理、市场营销、生产运作、财务管理、战略决策等课程教学的仿真博弈模拟软件,本软件在近20年的完善和升级之后,已经相当成熟,在台湾、香港、新加坡等地的一些大学应用受到了普遍的好评。2003年后软件在浙江大学、山东大学、四川大学、西南财经大学、成都理工大学、南京大学、河海大学、南京理工大学、南京航空航天大学、哈尔滨工程大学、哈尔滨商业大学、郑州轻工业学院等50多所院校的使用引起了教师和学生的极大兴趣。 BOSS软件是由六个学生组成企业中总经理、企划、生产、采购、销售、财务经理这样一支经营团队,从事各自的经营与决策,每个企业在老师设定的宏观和微观经营环境里,与其它企业进行竞争,以一个季度为一个周期,最多可连续做到16个周期(四

51单片机模拟spi串行接口程序

51单片机模拟spi串行接口程序 51单片机模拟spi串行接口程序,在keilc51下编写 sbit CS=P3^5; sbit CLK= P1^5; sbit DataI=P1^7; sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开 unsigned char SPI_TransferByte(unsigned char val) { unsigned char BitCounter; for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0; DataI=0; // write if(val&0x80) DataI=1; val<<=1; CLK=1; if(DataO)val|=1; // read } CLK=0; return val; }sbit CLK= P1^5; sbit DataI=P1^7;

sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开 unsigned char SPI_TransferByte(unsigned char val) { unsigned char BitCounter; for(BitCounter=8; BiCounter!=0; BitCounter--) { CLK=0; DataI=0; // write if(val&0x80) DataI=1; val<<=1; CLK=1; if(DataO)val|=1; // read } CLK=0; return val; } sbit CLK= P1^5; sbit DataI=P1^7; sbit DataO=P1^6; #define SD_Disable() CS=1 //片选关 #define SD_Enable() CS=0 //片选开

火电站虚拟仿真教学软件

产品介绍 火电虚拟仿真实验教学系统以实际电站设计资料为原型,运用虚拟现实技术模拟电厂环境和操作过程,实现了“三维虚拟电站+DCS中控室”二位一体的全面仿真系统。利用特效、交互、文字、语音等手段,使学生可以在虚拟电站中了解设备和系统的布局及流程,同时也采用图形化数字模型建模方式,创建遵循能量等守恒关系的涉及热动、控制、电气等专业领域的机理数字模型。支持DCS 操作,提供二维三维互联互通机制,为学生提供从设备环境到启动操作、系统原理、事故安全等全方位的教学环境。 产品列表 1000MW超超临界电站虚拟仿真实验教学系统 CFB( 循环流化床) 锅炉虚拟仿真教学系统 300MW亚临界电站虚拟仿真实验教学系统 垃圾焚烧电站 产品特点 1.不但有数值( DCS) ,还有三维的模拟。 2.三维场景可以部分代替学生的认识实习. 3.分系统可以在复杂的场景中单独演示,利于学习. 4.巡检模拟形象逼真,从路线选择开始,涵盖了现场的巡检全过程,此外加入了安全学习,职位介绍,相关知识考核等模块。

5.现场无法看到的内容结构可以在软件上看到。 6.在三维场景当中可以用特效逼真地模拟出设备以及系统的工作原理。 7.教师可以在软件中自由修改文字、视频、图片等。 300WM软件主要界面 教学与实训内容 电厂概貌以电厂三维场景为原型介绍整个电厂原理,学生能够迅速获得电厂整体性认识。

安全培训“安全第一,预防为主”,软件汇集各大电厂的事故,提供从业人员安全意识。 电厂认识设备的原理展示,拆装,系统的原理展示、搭建。 运行与操作由底层数学模型支撑,对设备进行交互操作,观察工质流动和现象。 事故与处理通过相应的操作或特定的工况出发事故现象并展示相应的处理过程。 巡检实训设备的巡检点、巡检标准、巡检方式等方面、高度真实地还原了现场巡检过程 1000WM巡检界面

51单片机IO口模拟串口通讯C源程序

51单片机IO口模拟串口通讯C源程序 #include sbit BT_SND =P1^0; sbit BT_REC =P1^1; /********************************************** IO 口模拟232通讯程序 使用两种方式的C程序占用定时器0 **********************************************/ #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit ACC7= ACC^7; void IntTimer0() interrupt 1 { F_TM=1; } //发送一个字符 void PSendChar(unsigned char inch) { #ifdef MODE_QUICK ACC=inch; F_TM=0; BT_SND=0; //start bit TIMER0_ENABLE; //启动 while(!F_TM); BT_SND=ACC0; //先送出低位

F_TM=0; while(!F_TM); BT_SND=ACC1; F_TM=0; while(!F_TM); BT_SND=ACC2; F_TM=0; while(!F_TM); BT_SND=ACC3; F_TM=0; while(!F_TM); BT_SND=ACC4; F_TM=0; while(!F_TM); BT_SND=ACC5; F_TM=0; while(!F_TM); BT_SND=ACC6; F_TM=0; while(!F_TM); BT_SND=ACC7; F_TM=0; while(!F_TM); BT_SND=1; F_TM=0; while(!F_TM); TIMER0_DISABLE; //停止timer #else unsigned char ii; ii=0; F_TM=0; BT_SND=0; //start bit

利用VIRTUAL TERMINAL模拟单片机串口收发实验

利用VIRTUAL TERMINAL模拟单片机串口收发实验 程序 #include //包含头文件 //毫秒级延时函数 void delay(unsigned int x) { unsigned char i; while(x--) { for(i=0;i<120;i++); } } //字符发送函数 void putchar(unsigned char data1) { SBUF=data1; //将待发送的字符送入发送缓冲器 while(TI==0); //等待发送完成 TI=0; //发送中断标志请0 } //字符串发送函数 void putstring(unsigned char *dat) { while(*dat!='\0') //判断字符串是否发送完毕 { putchar(*dat); //发送单个字符 dat++; //字符地址加1,指向先下一个字符 delay(5); } } //主函数 void main(void) { unsigned char c=0; SCON=0x50; //串口方式1 ,允许接收 TMOD=0x20; //T1工作于方式2 PCON=0x00; //波特率不倍增 TL1=0xfd; //波特率设置 TH1=0xfd; //

EA=1; //开总中断 ES=1; //开串口接收中断 //TI = 0; TR1=1; //定时器开启 delay(200); putstring("abc\r\n"); //串口向终端发送字符串,结尾处回车换行putstring("----------------------\r\n"); delay(50); while(1) { } } // void revdata(void) interrupt 4 { unsigned char temp; if(RI==0) return; //如果没有接收中断标志,返回 ES=0; //关闭串口中断 RI=0; //清串行中断标志位 temp=SBUF; //接收缓冲器中的字符 putchar(temp); //将接收的字符发送出去 ES=1; //开启串口中断 }

十大物流仿真软件汇总教程文件

十大物流仿真软件汇总 目录 (一) Flexsim (2) (二) RaLC(乐龙) (2) (三) Witness(SDX) (2) (四) Automod (3) (五) ShowFlow (3) (六) SIMAnimation (4) (七) Arena (4) (八) Supply chain guru (5) (九) Classwarehouse (5) (十) SimLab (5)

(一)Flexsim Flexsim是美国的三维物流仿真软件,能应用于系统建模、仿真以及实现业务流程可视化.Flexsim中的对象参数可以表示基本上所有的存在的实物对象,如机器装备、操作人员、传送带、叉车、仓库、集装箱等,同时数据信息可以用Flexsim丰富的模型库表示出来.Flexsim具有层次结构,可以使用继承来节省开发时间.而且它还是面向对象的开放式软件.对象、视窗、图形用户界面、菜单列表、对象参数等都是非常直观的.由于Flexsim的对象是开放的,所以这些对象可以在不同的用户、库和模型之间进行交换,再结合对象的高度可自定义性,可以大大提高建模的速度.Flexsim的用户性和可移植性扩展了对象和模型的生命周期. (二)RaLC(乐龙) RaLC(乐龙)软件,是上海乐龙人工智能软件有限公司(日本人工智能服务有限公司在华子公司)提供的.它是面向对象的,物流配送中心所使用的基本搬运器械设备即对象事物,包括各种传送带、自动立体仓库、平板车等,以及工作人员的装卸、分拣、叉车搬运等,全部以按钮的形式摆放在工具栏上,而且可以对对象物体的配置来进行设计,用于对各类对象物体的形状和规格建模也十分直观.RaLC 乐龙系列软件在建模速度、建模操作简便性、模拟和仿真精确度等方面都处于世界领先水平. (三)Witness(SDX) Witness(SDX)由英国Lanner集团用数十年系统仿真经验开发出的,它是面

51单片机汇编模拟串口通信程序

51单片机汇编模拟串口通信程序 T2作为波特率控制UART_RXD 是硬中断0或1口,如果能进入中断,说明该线有一个起始位产生,进入中断后调 用下面的接收程序。退出硬中断之前还需要将硬中断标志重新复位。 UART_TXD是任何其它IO即可。 UART_SEND: PUSH IE PUSH DPH PUSH DPL PUSH PSW PUSH 00H PUSH ACC CLR EA SETB UART_TXD ;START BIT MOV R0,A CLR TR2 ;TR2置1,计数器2启动,时间计数启动。 MOV A,RCAP2L;计数器2重新装载值 MOV TL2,A ;置计数器2初值;T2需要重新装载 MOV A,DPH MOV A,RCAP2H MOV TH2,A MOV A,R0 SETB TR2 ;TR2置1,计数器 JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 CLR UART_TXD ;START BIT JNB TF2,$

CLR TF2 JNB TF2,$ CLR TF2 MOV R0,#08H UART_SEND_LOOP: RRC A MOV UART_TXD,C ;8 BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 DJNZ R0,UART_SEND_LOOP SETB UART_TXD ;END BIT JNB TF2,$ CLR TF2 JNB TF2,$ CLR TF2 POP ACC POP 00H POP PSW POP DPL POP DPH POP IE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UART_REC: PUSH IE PUSH DPH PUSH DPL CLR EA

用定时器 T0 或 T1 模拟串行口程序

/************************************************************************* 用定时器T0 或T1 模拟串行口程序。 最高波特率(12 clock): 本程序收、发波特率相同。 11.059MHz -- 最高波特率收: 9600, 最低波特率:300 30.000MHz -- 最高波特率收: 28800 最低波特率:300 40.000MHz -- 最高波特率收: 38400 最低波特率:300 ... 使用说明: 1. 本程序使用一个定时器和任意2 个I/O 口模拟一个串行口。 2. 1位起始位,8位数据位,1位停止位。发数据位时先发低位。 3. 支持半双工通讯。收、发波特率相同。 4. 应把定时器中断优先级设置为最高级。 5. 本程序每接收一个字节后就把它放到一个队列缓冲区中(也可使用环行缓冲区), 待缓冲区满后,将缓冲区中的内容原样发回。这是为了测试多字节连续收发的 能力和简化程序。实际应用中应防止缓冲区溢出。 6. 由接收转换到发送时要先调用soft_send_enable (); 由发送转换到接收时要先调用 soft_receive_enable ()。 7. 发送最后一个字节后如果要立刻转为接收,必须等待最后一个字节后发送完毕 w hile ( rs_f_TI == 0) ; // 等待最后一个字节发送完毕 ************************************************************************** 编程说明: ---------------- 发送: 由接收转换到发送时要先调用soft_send_enable (), 它为发送做初始化的工作。 以后就可以调用rs_send_byte () 启动发送一个字节的过程。 发送口平时为高电平,rs_send_byte ()函数使发送口变为低电平开始发送起始位; 同时设置和启动定时器,为发送数据位在预定的时刻产生定时器中断。发送数据位和停止位都在定时器的中断服务程序中进行。 中断服务程序中处理4 种情况:发送数据位、发送停止位、发送完毕、处理错误。---------------- 接收: 由发送转换到接收时要先调用soft_receive_enable (), 它为接收做初始化的工 作。定时器以3 到4 倍波特率的频率产生中断(参见rs_TE ST0 的定义)检测P C 机发送的起始位。一旦检测到起始位,立刻把定时器产生中断的频率调整到与波特率相同,准备在下一个定时器中断中接收第1 个数据位。 中断服务程序中处理以下情况: 1. 收到的是P C 机发送的起始位: 调整定时器产生中断的频率与波特率相同。 2. 收到第8 位数据位: 存储接收到的字节。 3. 收到第1--7 位数据位: 存储到收、发移位暂存器。 4. 收到停止位: 调用soft_recei v e_enable(),检测PC 机发出的下一个起始位。 5. 处理出错的情况。 **************************************************************************/

51单片机IO口模拟串口

论坛新老朋友们。祝大家新年快乐。在新的一年开始的时候,给大家一点小小的玩意。工程师经常碰到需要多个串口通信的时候,而低端单片机大多只有一个串行口,甚至没有串口。这时候无论是选择高端芯片,还是更改系统设计都是比较麻烦的事。我把以前搞的用普通I/O口模拟串行口通讯的程序拿出来,供大家参考,希望各位兄弟轻点拍砖。基本原理:我们模拟的是串行口方式1.就是最普通的方式。一个起始位、8个数据位、一个停止位。模拟串行口最关键的就是要计算出每个位的时间。以波特率9600为例,每秒发9600个位,每个位就是1/9600秒,约104个微秒。我们需要做一个精确的延时,延时时间+对IO口置位的时间=104微秒。起始位是低状态,再延时一个位的时间。停止位是高状态,也是一个位的时间。数据位是8个位,发送时低位先发出去,接收时先接低位。了解这些以后,做个IO 模拟串口的程序,就是很容易的事。我们开始。先上简单原理图:就一个MAX232芯片,没什么好说的,一看就明白。使用单片机普通I/O口,232数据输入端使用51单片机P3.2口(外部中断1口,接到普通口上也可以,模拟中断方式的串行口会有用。呵呵)。数据输出为P0.4(随便哪个口都行)。 下面这个程序,您只需吧P0.4 和P3.2 当成串口直接使用即可,经过测试完全没有问题. 2、底层函数代码如下: sbit TXD1 = P0^4; //定义模拟输出脚 sbit RXD1 = P3^2; //定义模拟输入脚 bdata unsigned char SBUF1; //定义一个位操作变量 sbit SBUF1_bit0 = SBUF1^0; sbit SBUF1_bit1 = SBUF1^1; sbit SBUF1_bit2 = SBUF1^2; sbit SBUF1_bit3 = SBUF1^3; sbit SBUF1_bit4 = SBUF1^4; sbit SBUF1_bit5 = SBUF1^5; sbit SBUF1_bit6 = SBUF1^6; sbit SBUF1_bit7 = SBUF1^7; void delay_bps() {unsigned char i; for (i = 0; i < 29; i++); _nop_();_nop_();} //波特率9600 模拟一个9600波特率 unsigned char getchar2() //模拟接收一个字节数据 { while (RXD1); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); delay_bps(); SBUF1_bit0 = RXD1; //0 delay_bps(); SBUF1_bit1 = RXD1; //1 delay_bps(); SBUF1_bit2 = RXD1; //2

企业营运管理仿真模拟教学软件(TOPBOSS)简介

企业营运管理仿真模拟教学软件(TOP-BOSS)简介 如何让学生缩小所学营销理论与实务间的诸多差距; 如何让学生学会进行市场调查、信息收集、市场预测及市场分析; 如何让学生学会在企业不同部门、岗位之间的工作协调能力与沟通技巧; 如何让学生亲身感受现实环境中竞争的残酷性和科学有效管理的重要性; 如何让学生理解评估内部资源与透彻分析外部环境对制订战略的重要影响; 如何让学生能就各种不同的营销案例进行分析、研究并写出高质量的报告; 如何让学生客观的看到自己的优势与不足,懂得理性的去选择职业和岗位。 BOSS仿真模拟教学软件会给出所有答案: 1.项目内容: 企业营运管理仿真模拟教学软件(简称TOP-BOSS软件),是在参照世界各名牌大学的管理类学科的实验教学模式,累积了30多位优秀教授们的智慧结晶,吸收各方面的管理类学科教学实践经验,研究开发的专门用于企业管理、市场营销、生产运作、财务管理、战略决策等课程教学的仿真博弈模拟软件,本软件在近20年的完善和升级之后,已经相当成熟,在台湾、香港、新加坡等地的一些大学应用受到了普遍的好评。2003年后软件在浙江大学、山东大学、四川大学、西南财经大学、成都理工大学、南京大学、河海大学、南京理工大学、南京航空航天大学、哈尔滨工程大学、哈尔滨商业大学、郑州轻工业学院等50多所院校的使用引起了教师和学生的极大兴趣。 BOSS软件是由六个学生组成企业中总经理、企划、生产、采购、销售、财务经理这样一支经营团队,从事各自的经营与决策,每个企业在老师设定的宏观和微观经营环境里,与其它企业进行竞争,以一个季度为一个周期,最多可连续做到16个周期(四年),最后主持人(教授者)根据胜负决定标准-利润(或期末业主权益、投资报酬率)判定企业经营的绩效和优胜者。 BOSS有BOSS1、BOSS2、BOSS3及BOSS4四个不同难易程度的模型,供老根据教学需求选择使用,并可对决策结果进行各项指标分析与评估,如四个不同类型市场的市场占

单片机IO口模拟串口程序(发送+接收)

前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口。经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。 程序硬件平台:11.0592M晶振,STC单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用P2.1作为发送端 * 把单片机中存放的数据通过P2.1作为串口TXD发送出去 ***************************************************************/ #include #include #include typedef unsigned char uchar; int i; uchar code info[] = { 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5 5 }; sbit newTXD = P2^1;//模拟串口的发送端设为P2.1 void UartInit() { SCON = 0x50; // SCON: serail mode 1, 8-bit UART TMOD |= 0x21; // T0工作在方式1,十六位定时 PCON |= 0x80; // SMOD=1; TH0 = 0xFE; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=11.0592MHz // TH0 = 0xFD; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz // TL0 = 0x7F; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bps fosc=18.432MHz } void WaitTF0(void) {

模拟串口的C语言源程序代码

模拟串口的C语言源程序代码 本程序是模拟串口硬件机制写的,使用时可设一定时中断,时间间隔为 1/4 波特率,每中断一次调用一次接收函数,每中断4 次调用一次发送函数,不 过.对单片机来说时钟并须要快.要知道9600 的波特率的每个BIT 的时间间隔是 104us.而单片机中断一次压栈出栈一次的时间是20us 左右(标准的51 核12M 晶体)这样处理时间就要考虑清楚了.呵呵.以下程序是放在定时器中断程序函数内 的 //接收部分sbit JieShou_D= ;//定义接收端口uint8 DingShiJiShu,JieShou_h;//定时计数,接收缓冲器uint16 JieShou_T;//接收临时寄存器bit KaiShi,JieShou_b;// 开始接收标准,接收完成标志 void JieShou(void) //接收函数,每4 次调用接收一位{ if((KaiShi==0) (JieShou_D==0)) //串行开始位到来{ DingShiJiShu=0; //开始定时计数KaiShi=1; JieShou_T=0xffff; //接收临时寄存器置全1 } else if((KaiShi==1) (DingShiJiShu==1)) //第2 次调用,串行数据采样时间到来{ JieShou_T = 1; if(JieShou_D) JieShou_T |=0x8000; } else if(JieShou_T 0x807f ==0x803f) //接收完成JieShou_T=1xxx_xxxx_x011_1111 { KaiShi=0; DingShiJiShu=0; JieShou_h = JieShou_T 7; //右移7 位得到串行数据JieShou_b=1; } if(KaiShi) { DingShiJiShu++; //只在开始接收时定时计数+1 DingShiJiShu =0x03; //每4 次调用接收一位} } //发送部分sbit FaSong_D= ;//定义发送端口uint16 FaSong_h; //发送缓冲区bit FaSong_b; //发送完成标志 void KaiShiFaSong(uint8 fs) //设置发送数据,开始发送{ FaSong_h = fs; FaSong_h = 1; FaSong_h |= 0x0200; //FaSong_h=0000_001x_xxxx_xxx_0

相关文档
最新文档