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

合集下载

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

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

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位自动重装,重装值为A0Main(){TMOD = 0x21; //T0:模式1,16位定时器。

T1:模式2,8位定时器,自动重装AUXR &= 0x3f; //定时器0和定时器1与普通8051定时器一样(不同的单片机设置可能不同)TL1 = 0xa0; //虚拟串口波特率:9600TH1 = 0xa0;ET0 = 1;ET1 = 0; //T1中断一定不要使用,要不接收会错误TR0 = 1;TR1 = 0;Uart(0xaa); //0xaa是发送的数据,如果接收有误,在发送一个字节后可加点延时//延时While(1); //具体程序此处省略}注:因本人实验的硬件不需要模拟串口来接收数据,故没给出虚拟串口接收程序。

简单好用的stc12c5a串口2发送程序!

简单好用的stc12c5a串口2发送程序!

//功能:stc12c5a串口2发送程序,发送0--9,晶振频率11.0592MHz,串行口工作于方式1,波特率为9600#ifndef __STC12C5A60S2_H__#define __STC12C5A60S2_H__//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机内核特殊功能寄存器 C51 Core SFRs// 7 6 5 4 3 21 0 Reset Valuesfr ACC = 0xE0; //Accumulator 0000,0000sfr B = 0xF0; //B Register 0000,0000sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OVF1 P 0000,0000//-----------------------------------sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;//-----------------------------------sfr SP = 0x81; //Stack Pointer 0000,0111sfr DPL = 0x82; //Data Pointer Low Byte 0000,0000sfr DPH = 0x83; //Data Pointer High Byte 0000,0000//--------------------------------------------------------------------------------//新一代 1T 8051系列单片机系统管理特殊功能寄存器// 7 6 5 4 3 21 0 Reset Valuesfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PDIDL 0001,0000// 7 6 5 4 3 21 0 Reset Valuesfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000//-----------------------------------sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ -DPS 0000,0000/*PCA_P4:0, 缺省PCA 在P1 口1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,PCA0/PWM0 从P1.3 切换到P4.2 口PCA1/PWM1 从P1.4 切换到P4.3 口SPI_P4:0, 缺省SPI 在P1 口1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口MISO 从P1.6 切换到P4.2 口MOSI 从P1.5 切换到P4.1 口SS 从P1.4 切换到P4.0 口S2_P4:0, 缺省UART2 在P1 口1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口RxD2 从P1.2 切换到P4.2 口GF2: 通用标志位ADRJ:0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器DPS: 0, 使用缺省数据指针DPTR01,使用另一个数据指针DPTR1*///-----------------------------------sfr WAKE_CLKO = 0x8F; //附加的 SFR WAK1_CLKO/*7 6 5 4 3 2 1 0 Reset ValuePCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE _ T1CLKO T0CLKO 0000,0000Bb7 - PCAWAKEUP : PCA 中断可唤醒 powerdown。

串行口自发自收实验 单片机程序

串行口自发自收实验 单片机程序
图2静态显示电路图
图3波形脉冲宽度测试原理
评分表
序号
评分项目
分值
评分
备注
1
按键的读取
20
1、电路图的理解
2、读键准确性
2
静态显示
20
1、电路图的理解
2、显示的准确性
3、显示数据的处理
3
串行口
20
1、串行口的设置
2、串行口的发送
3、串行口的接收
#include<reg51.h>
unsigned char code led_code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,
{
unsigned int i;
unsigned char j;
for(i=x;i>0; i--)
for(j=110;j>0;j--);}void mai Nhomakorabea(void)
{
TMOD=0x20;
SCON=0x50;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
EA=1;
ES=1;
TR1=1;
dis_buf[0]=led_code[16];
串行口自发自收实验
实验内容:
根据电路如图1所示编写程序。实现当键1按下,单片机串行口应用方式1连续向外发送“0、1、2、3”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键2按下,单片机串行口应用方式1连续向外发送“4、5、6、7”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键3按下单片机串行口应用方式1连续向外发送“8、9、a、b”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来;当键4按下,单片机串行口应用方式1连续向外发送“c、d、e、f”四字节数据,通过串行口单片机自发自收改信号,将接受的数据显示出来。

IO口模拟UART串口通信

IO口模拟UART串口通信

IO口模拟UART串口通信为了让大家充分理解UART串口通信的原理,我们先用P3.0和P3.1这两个当做IO口来开展模拟实际串口通信的过程,原理搞懂后,我们再使用存放器配置实现串口通信过程。

对于UART串口波特率,常用的值是300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200、128000、256000等速率。

IO口模拟UART串行通信程序是一个简单的演示程序,我们使用串口调试助手下发一个数据,数据加1后,再自动返回。

串口调试助手,在我们开展全板子测试视频的时候,大家已经见过,这里我们直接使用STC-ISP软件自带的串口调试助手,先把串口调试助手使用给大家说一下,如图1所示。

第一步要选择串口助手菜单,第二步选择十六进制显示,第三步选择十六进制发送,第四步选择COM口,这个COM口要和自己电脑设备管理器里的那个COM口一致,波特率是我们程序设定好的选择,我们程序中让一个数据位持续时间是1/9600秒,那这个地方选择波特率就是选9600,校验位选N,数据位8,结束位1。

图1串口调试助手示意图串口调试助手的实质就是我们利用电脑上的UART通信接口,通过这个UART接口发送数据给我们的单片机,也可以把我们的单片机发送的数据接收到这个调试助手界面上。

因为初次接触通信方面的技术,所以我对这个程序开展一下解释,大家可以边看我的解释边看程序,把底层原理先彻底弄懂。

变量定义部分就不用说了,直接看main主函数。

首先是对通信的波特率的设定,在这里我们配置的波特率是9600,那么串口调试助手也得是9600。

配置波特率的时候,我们用的是定时器0的模式2。

模式2中,不再是TH0代表高8位,TL0代表低8位了,而只有TL0在开展计数了。

当TL0溢出后,不仅仅会让TF0变1,而且还会将TH0中的内容重新自动装到TL0中。

这样有一个好处,我们可以把我们想要的定时器初值提前存在TH0中,当TL0溢出后,TH0自动把初值就重新送入TL0了,全自动的,不需要程序上再给TL0重新赋值了,配置方式很简单,大家可以自己看下程序并且计算一下初值。

51单片机IO口模拟串口

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; //0delay_bps();SBUF1_bit1 = RXD1; //1delay_bps();SBUF1_bit2 = RXD1; //2delay_bps();SBUF1_bit3 = RXD1; //3delay_bps();SBUF1_bit4 = RXD1; //4delay_bps();SBUF1_bit5 = RXD1; //5delay_bps();SBUF1_bit6 = RXD1; //6delay_bps();SBUF1_bit7 = RXD1; //7delay_bps();return(SBUF1) ; //返回读取的数据}void putchar2(unsigned char input) //模拟发送一个字节数据{SBUF1 = input;TXD1 = 0; //起始位delay_bps();TXD1 = SBUF1_bit0; //0delay_bps();TXD1 = SBUF1_bit1; //1delay_bps();TXD1 = SBUF1_bit2; //2delay_bps();TXD1 = SBUF1_bit3; //3delay_bps();TXD1 = SBUF1_bit4; //4delay_bps();TXD1 = SBUF1_bit5; //5delay_bps();TXD1 = SBUF1_bit6; //6delay_bps();TXD1 = SBUF1_bit7; //7delay_bps();TXD1 = 1; //停止位delay_bps();}3、实现串行通讯。

51单片机模拟串口的三种方法

51单片机模拟串口的三种方法

//先传低位
} //查询计数器溢出标志位 void WaitTF0( void ) { while(!TF0); TF0=0; } 接收的程序,可以参考下一种方法,不再写出。这种办法个人感觉不错,接收和 都很准确,另外不需要计算每条语句的指令周期数。 方法三:中断法
中断的方法和计数器的方法差不多,只是当计算器溢出时便产生一次中断,用户 在中断程序中置标志,程序不断的查询该标志来决定是否发送或接收下一位,当然程 断进行初始化,同时编写中断程序。本程序使用Timer0中断。 #define TM0_FLAG P1_2 //设传输标志位 //计数器及中断初始化 void S2INI(void) { TMOD =0x02; //计数器0,方式2 TH0=0xA0; //预值为256-96=140,十六进制A0 TL0=TH0; TR0=0; //在发送或 接收才开始使用 TF0=0; ET0=1; //允许定时
//发送启始
位 Delay2cp(39); //发送8位数据位 while(i--) { TXD=(bit)(input&0x01); Delay2cp(36); input=input>>1; } //发送校验位(无) TXD=(bit)1; 位 Delay2cp(46); } //从串口读一个字节 uchar RByte(void) { uchar Output=0; uchar i=8; uchar temp=RDDYN; //发送8位数据位 Delay2cp(RDDYN*1.5); while(i--) { Output >>=1; if(RXD) Output Delay2cp(35); 占用26个指令周期 } while(--temp) 时间内搜寻结束位。 { Delay2cp(1); if(RXD)break; } return Output;

IO口模拟232测试程序

IO口模拟232测试程序

/********************************************************* IO口模拟232测试程序,仿单片机Keil Cx51应用开发技术中的程序主要的功能是在利用串口调试工具发送一个8bit的数据,而后单片机接收后把这个数据发送给模拟串口*********************************************************/ #include "STC12C2052AD.H"sbit Tx_Pin=P3^7;//发送端口sbit Rx_Pin=P1^0;//接收端口sbit Baud0=P1^6;sbit Baud1=P1^7;//波特率选择bit Flag=0;//若标志位为1,则表示串口已经过了一位的时间#define unchar unsigned char#define unint unsigned intunchar HighTime;unchar LowTime;/********************************************************/ bit CheckA vailStartBit()//检测开始位{return(Rx_Pin==0);//若为0,则返回1,即有数据传送//若为1,则返回0,即没有接收到数据}/********************************************************/ void Timer0() interrupt 1//定时器中断处理{Flag=1;TL0=LowTime;TH0=HighTime;}/********************************************************/ unchar ReceiveByte()//接收字节{unchar Data;unint i;Data=0x00;TR0=1;//开始定时while(Flag==0);Flag=0;//开始位不采样for(i=0;i<=7;i++){Data>>=1;//移位处理if(Rx_Pin==1)//为1的话,则进行处理{Data|=0x80;}while(Flag==0);//若Flag为0,则时间还未到,等待//若Flag为1,则一位的时间已经到,准备接收数据Flag=0;}while(Flag==0);//对第9位停止位的处理Flag=0;while(Flag==0){if(Rx_Pin)//检测到停止位,退出{break;}}TR0=0;//关闭定时器return(Data);//返回数据}/********************************************************/void SendByte(unchar Data){unint i;TR0=1;//开始定时Tx_Pin=0;//起始位,0while(Flag==0);Flag=0;for(i=0;i<=7;i++){if(Data&0x01){Tx_Pin=1;}else{Tx_Pin=0;}Data>>=1;while(Flag==0);Flag=0;}Tx_Pin=1;//结束位TR0=0;//关闭定时器}/********************************************************/void main(){unchar temp;TMOD=0x01;//定时器0为模式1,自动重装载TR0=0;PCON=0x00;if(Baud1==1){if(Baud0==1){HighTime=0xFF;LowTime=0xD0;//在这个分频下波特率为19200}else{HighTime=0xFF;LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率}}else{if(Baud0==0){HighTime=0xFF;LowTime=0x40;//在这个分频下波特率为4800}else{HighTime=0xFE;LowTime=0x80;//在这个分频下波特率为2400}}/********************测试*********************************/HighTime=0xFF;LowTime=0xA0;//在这个分频下波特率为9600,也是默认的波特率/*********************************************************/ TH0=HighTime;TL0=LowTime;ET0=1;//开定时器0的中断EA=1;//开总中断for(;;){if(CheckA vailStartBit())//模拟接收口检测到起始位{temp=ReceiveByte();//接收数据SendByte(temp);//将接收到的数据发送给PC }}}。

STM8L101F3P6单片机IO模拟收发调试

STM8L101F3P6单片机IO模拟收发调试

本程序选用的芯片为STM8L101F3P6共分为如下几个文件Main.c文件内容#include "stm8l10x_diy_time.h"#include "stm8l10x_diy_port.h"#include "STM8L101F3P.h"#include "NRF24L01.h"#include "STM8l10x.h"char lock_key;void main(void){clk_init ();//时钟初始化gpio_init();time_init();LED01=0;LED02=0;IRQ_OUT;//IRQ设置为输出模式IRQ_O=1;//赋值ifnnrf_rx_mode();while (1){if(But01==0){ IRQ_OUT;IRQ_O=1;SPI_RW_Reg(WRITE_REG+STATUS,0xff);tx_buf[0]=2;ifnnrf_tx_mode();IRQ_IN;while(IRQ_I);sta=SPI_Read(STATUS);SPI_RW_Reg(WRITE_REG+STA TUS,0xff);if(sta& STA_MARK_TX){LED02=1;Delay(0xfffFf);LED02=0;Delay(0xffFff);}else{ifnnrf_CLERN_ALL();LED02=1;Delay(0xffFf);LED02=0;Delay(0xffFf);}ifnnrf_rx_mode();IRQ_OUT;IRQ_O=1;IRQ_IN;Delay(0x0f);while(IRQ_I==0);Delay(0xffff);}IRQ_OUT;IRQ_O=1;IRQ_IN;if(IRQ_I==0){sta=SPI_Read(STATUS);SPI_RW_Reg(WRITE_REG+STATUS,0xff);if(sta&STA_MARK_RX){SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);if (rx_buf[0] == 2){LED01=1;Delay(0xffFff);LED01=0;Delay(0xfFfff);rx_buf[0] = 0;}}else{ifnnrf_CLERN_ALL();ifnnrf_rx_mode();IRQ_OUT;IRQ_O=1;IRQ_IN;Delay(0x0f);while(IRQ_I==0);}}}}@far @interrupt void TIM4_interrupt(void){static unsigned int TIM_Work;static unsigned char TIM_Time;if(But01==0){if(TIM_Work++>2500){// LED01 =~LED01;TIM_Work=0;}}else{TIM_Work =0;// LED01 =0;}TIM4_SR1 = 0x00;return;}stm8_interrupt_vector.c内容/* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices* Copyright (c) 2007 STMicroelectronics*/typedef void @far (*interrupt_handler_t)(void);struct interrupt_vector {unsigned char interrupt_instruction;interrupt_handler_t interrupt_handler;};@far @interrupt void NonHandledInterrupt(void){/* in order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction */return;}extern void _stext(); /* startup routine */extern @far @interrupt void TIM4_interrupt(void);struct interrupt_vector const _vectab[] = {{0x82, (interrupt_handler_t)_stext}, /* reset */{0x82, NonHandledInterrupt}, /* trap */{0x82, NonHandledInterrupt}, /* irq0 */{0x82, NonHandledInterrupt}, /* irq1 */{0x82, NonHandledInterrupt}, /* irq2 */{0x82, NonHandledInterrupt}, /* irq3 */{0x82, NonHandledInterrupt}, /* irq4 */{0x82, NonHandledInterrupt}, /* irq5 */{0x82, NonHandledInterrupt}, /* irq6 */{0x82, NonHandledInterrupt}, /* irq7 */{0x82, NonHandledInterrupt}, /* irq8 */{0x82, NonHandledInterrupt}, /* irq9 */{0x82, NonHandledInterrupt}, /* irq10 */{0x82, NonHandledInterrupt}, /* irq11 */{0x82, NonHandledInterrupt}, /* irq12 */{0x82, NonHandledInterrupt}, /* irq13 */{0x82, NonHandledInterrupt}, /* irq14 */{0x82, NonHandledInterrupt}, /* irq15 */{0x82, NonHandledInterrupt}, /* irq16 */{0x82, NonHandledInterrupt}, /* irq17 */{0x82, NonHandledInterrupt}, /* irq18 */{0x82, NonHandledInterrupt}, /* irq19 */{0x82, NonHandledInterrupt}, /* irq20 */{0x82, NonHandledInterrupt}, /* irq21 */{0x82, NonHandledInterrupt}, /* irq22 */{0x82, NonHandledInterrupt}, /* irq23 */{0x82, NonHandledInterrupt}, /* irq24 */{0x82, TIM4_interrupt}, /* irq25 */{0x82, NonHandledInterrupt}, /* irq26 */{0x82, NonHandledInterrupt}, /* irq27 */{0x82, NonHandledInterrupt}, /* irq28 */{0x82, NonHandledInterrupt}, /* irq29 */};stm8l10x_diy_port.c内容#include "stm8l10x_diy_port.h"#include "STM8L101F3P.h"#include "stm8l10x_gpio.h"/************************************************************** 功能:配置IO口配置IO输入输出说明输出:配置PC_DDR,PC_CR1寄存器,把相应位拉高即可输入:只配置PD_CR1寄存器,拉高即可/*************************************************************/ void gpio_init(void){GPIO_DeInit(GPIOB);//恢复寄存器到默认值GPIO_DeInit(GPIOC);GPIO_DeInit(GPIOD);/*配置输出****************************************************/ PC_DDR|= 0x04;//LEDPC_CR1|= 0x04;//LEDPD_DDR|= 0x01;//LEDPD_CR1|= 0x01;//LEDPC_DDR|= 0x01;//CEPC_CR1|= 0x01;//CEPB_DDR|= 0x10;//CSNPB_CR1|= 0x10;//CSNPB_DDR|= 0x20;//SCKPB_CR1|= 0x20;//SCKPB_DDR|= 0x80;//MISOPB_CR1|= 0x80;//MISO/*配置输入****************************************************/ PC_CR1|= 0x08;//buttomPB_CR1|= 0x01;//buttomPB_CR1|= 0x40;//mOSIPB_CR1|= 0x02;//IRQLED01=1;LED02=1;IRQ_OUT;//IRQ作为输出IRQ_O=1;CE=0; // chip enableCSN=1; // Spi disableSCK=0; // Spi clock line init high}/************************************************************** 功能:配置时钟/*************************************************************/ void clk_init(void){CLK_CKDIVR = 0x00;CLK_PCKENR|= 0x04;//开启定时器4中断(必修有)/*TIM2:0x01TIM3:0x02TIM4:0x04************************************************************/}/************************************************************** 延迟函数/*************************************************************/ void Delay(unsigned int nCount){while (nCount != 0){nCount--;}}/************************************************************** 按键防抖动及按键锁/*************************************************************/ char Key_Scanf(char Buttom){static char Key_Lock;char ButtomStatus;ButtomStatus=But_OFF ;if(Buttom==But_ON){Delay(0x3ff);/* 消抖*/if((Buttom==But_ON)&&(Key_Lock==1)){ButtomStatus=But_ON;}}else Key_Lock= 1;return ButtomStatus;}stm8l10x_diy_port.h内容#ifndef __stm8l10x_diy_port_H#define __stm8l10x_diy_port_H#include "STM8L101F3P.h"#define L 0#define H 1#define But_ON 0 //按下时为低#define But_OFF 1#define IRQ_OUT PB_DDR|= 0x02 //配置输出#define IRQ_IN PB_DDR&= 0xFD //配置输入_Bool IRQ_O @PB_ODR:1;//IRQ输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档