使用74LS165将AVR的串口输入扩为并口输入

发布者:GoldenEclipse最新更新时间:2020-06-29 来源: eefocus关键字:74LS165  AVR  串口输入  并口输入 手机看文章 扫描二维码
随时随地手机看文章

系统功能

使用74LS165将AVR的串口输入扩为并口输入。


硬件设计

AVR主控电路原理图

串行输入扩展为并行输入芯片74LS165控制电路原理图


软件设计


下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!


//目标系统: 基于AVR单片机

//应用软件: ICC AVR

/*01010101010101010101010101010101010101010101010101010101010101010101

----------------------------------------------------------------------

实验内容:

使用PA口作为信号源输入到74LS165,74LS165将会将该信号转为串行信号,

MCU再自己接收串行信号,使用PB口的LED指示灯查看数据是否正确。

----------------------------------------------------------------------

硬件连接:

将PB口的LED指示灯开关切换到"ON"状态。

           SeialBoard(165PrlPort)   SMK1632

    P0  ---------     PB0

    P1   ---------     PB1

    P2   ---------     PB2

    P3   ---------     PB3

    P4   ---------     PB4

    P5   ---------     PB5

    P6   ---------     PB6

    P7   ---------     PB7

    PL  ---------   PD2

     SeialBoard(165SrlPort)    SMK1632

    VCC  ---------   VCC

    GND  ---------   GND

    TXD  ---------   RXD

    RXD  ---------   TXD

----------------------------------------------------------------------

注意事项:

(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘

(2)请详细阅读:光盘根目录下的“产品资料开发板实验板SMK系列SMK1632说明资料”

----------------------------------------------------------------------

10101010101010101010101010101010101010101010101010101010101010101010*/


#include

#include "D:ICC_HCmmICC.H"


#define DISP_DDR    DDRB

#define DISP_PORT   PORTB


#define SOURCE_DDR  DDRA

#define SOURCE_PORT PORTA


#define IN_RXD  cbi(DDRD,0)    //PD0 数据口

#define GET_RXD  gbi(PIND,0)


#define OUT_TXD   sbi(DDRD,1)    //PD1 脉冲口

#define SET_TXD  sbi(PORTD,1)

#define CLR_TXD   cbi(PORTD,1)


#define OUT_PL  sbi(DDRD,2)    //PD2 锁存口

#define SET_PL  sbi(PORTD,2)

#define CLR_PL  cbi(PORTD,2)


/*--------------------------------------------------------------------

程序名称:从74LS165获取数据

程序功能:

注意事项:

提示说明:

输    入:

返    回:

--------------------------------------------------------------------*/

uint8 getDat()

{

 uint8 i,dat;


 for(i=0;i<8;i++) //循环输出8位数据

 {

  SET_TXD; //设置为高电平

  if(GET_RXD) //下降沿时候获取数据

   dat |= 0x01;

  dat = dat<<1;

  CLR_TXD; //设置为低电平

 }

 dat = dat>>1;

 return dat;

}

/*--------------------------------------------------------------------

程序名称:

程序功能:

注意事项:

提示说明:

输    入:

返    回:

--------------------------------------------------------------------*/

void main()

 uint8 i;

 

 DISP_DDR = 0XFF;

 SOURCE_DDR = 0XFF;

 OUT_PL;

 OUT_TXD;

 IN_RXD;

 //while(1)

 //{

  SOURCE_PORT = 0X55;

  SET_PL;

  CLR_PL;

  SET_PL;

  DISP_PORT = getDat();

 //}

}


系统调试

将74LS165的输入端口P0--P7接入单片机的PB口,那么PB口输出的数据经过74LS165的转换变为串行数据,将串行数据接入串口,那样若正常工作接收到的数据将与从PB口发出的数据一致,用LED指示串口接收到的数据,进行观察。

关键字:74LS165  AVR  串口输入  并口输入 引用地址:使用74LS165将AVR的串口输入扩为并口输入

上一篇:AVR IO输出之数码管扫描程序
下一篇:使用74LS164将AVR的串口输出扩为并口输出

推荐阅读最新更新时间:2024-11-02 14:34

基于AVR单片机atmega32的PID和PWM液体流量控制系统研究
1. 引言 液体流量控制通常采用电磁阀实现,近年来,电磁阀的结构和控制方式发生了很大的变 化,随着计算机进入控制领域,以及新型的电力电子功率元器件的不断出现,使采用全控制的开关功率元件进行脉宽调制(pulse width modulation ,简称PWM)控制方式得到了广泛的应用。这种控制方式很容易在单片机中实现,从而为电磁阀的控制数字化提供了契机。 将偏差的比例(proportion)、积分(integral)、微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。PID控制器最早出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现
[单片机]
基于<font color='red'>AVR</font>单片机atmega32的PID和PWM液体流量控制系统研究
ST7586S的AVR单片机驱动程序
AVR 单片机 MEGA64A /***************************ST7586S******************/ /************************PE5 --- /CS ***************************************/ /************************PG3 --- RS ***************************************/ /************************PG4 --- /WR ***************************************/ /*******
[单片机]
ST7586S的<font color='red'>AVR</font>单片机驱动程序
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。 1、 AVR单片机采用RISC架构,8051单片机采用CISC架构。前者速度为后者的2~4倍,为流水线操作指令。 2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。 3、 哈佛结构,131条机器指令。 4、 延迟开机功能。 5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。 6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。
[单片机]
AVR开发 Arduino方法(一) 端口子系统
  Arduino UNO R3的主处理器ATMega328P上有3个8位的输入/输出端口,分别是PB,PC和PD。Arduino IDE提供的Blink示例可以帮助我们了解端口的数字输出功能: 1 // Blink.ino 2 int led = 13; 3 4 void setup() { 5 pinMode(led, OUTPUT); 6 } 7 8 void loop() { 9 digitalWrite(led, HIGH); 10 delay(1000); 11 digitalWrite(led, LOW); 12 delay(1000); 13 }   这个示例使Arduino开发
[单片机]
<font color='red'>AVR</font>开发 Arduino方法(一) 端口子系统
如何使用AVR-GCC编译软件
安装GNU C for AVR 一.执行安装程序 二.生成链接用的库文件 $(AVR)表示安装的根目录。(在本人系统里为f:\avrg CC ) 生成库文件关键是要运行位于$(AVR)下的RUN.BAT。原程序如下: @echo off if NOT %AVR%!==! goto install rem set environment variables set AVR=f:\AVRGCC set CC=avr-gcc set PATH=.;f:\AVRGCC\bin;%path% doskey :install if %1!==
[单片机]
bascom avr单片机仿真oled显示
仿真原理图如下 rem Main.bas file generated by New Project wizard rem rem Created: 周三 1月 16 2019 rem Processor: ATmega88P rem Compiler: BASCOM-AVR2.0.7.9演示版 rem Write your code here '------------------------------------------------------------------------------- ' SSD1306-I2C.BAS ' (c) MCS
[单片机]
bascom <font color='red'>avr</font>单片机仿真oled显示
AVR单片机教程——定时器中断
本文隶属于AVR单片机教程系列。 中断,是单片机的精华。 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断。触发中断的事件成为中断源,处理事件的函数称为中断服务程序(ISR)。 中断在单片机开发中有着举足轻重的地位——没有中断,很多功能就无法实现。比如,在程序干别的事时接受UART总线上的输入,而uart_scan_char等函数只会接收调用该函数后的输入,先前的则会被忽略。利用中断,我们可以在每次接受到一个字节输入时把数据存放到缓冲区中,程序可以从缓冲区中读取已经接收的数据。 AVR单片机支持多种中断,包括外部引脚中断、定时器中断、总线中断等。每一个中断被触发时,通过中断向
[单片机]
AVR128的程序——步进电机点动正反控制
#include iom128v.H #include macros.h #define uchar unsigned char #define uint unsigned int uchar step_table ={0xf1,0xf2,0xf4,0xf8}; uchar step_table1 ={0xf8,0xf4,0xf2,0xf1}; void Delayms(uint MS); void mcu_init(void) { DDRA=0XFF; PORTA=0XFF; DDRC=0XFF; PORTC=0XFF; DDRF|=0X0E; PORTF|
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved