历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2019年12月19日 | PIC18F4550单片机三个操作寄存器的使用方法

2019-12-19 来源:elecfans

试验芯片:Microchip PIC 18F4550

集成开发环境:MPLAB IDE v8.53


编译器:Microchip C18

PIC18系列单片机是美国微芯公司(Microchip)8位单片机系列中的高档系列,其任一I/O引脚允许的最大灌电流或最大拉电流达25mA,可以直接驱动LED和继电器。PORTA、PORTB和PORTE的最大灌电流或最大拉电流总和为200mA,PORTC和PORTD的最大灌电流或最大拉电流总和为200mA,PORTF和PORTG的最大灌电流或最大拉电流总和为100mA(注:PIC18F4550没有这两个端口)。


单片机和外设的交互都是通过I/O端口进行,每个I/O端口均有三个操作寄存器:

1、TRISx———数据方向寄存器

用来控制I/O引脚的方向,即用来控制PORTx是输入还是输出。

2、PORTx——— 端口寄存器

用来锁存输出数据。当读PORTx时,器件直接读I/O引脚电平(而不是锁存值)。

3、LATx——— 输出数据锁存器

写端口就是写该锁存器(LATx)。数据锁存器也可以直接读写。如果外设没有使用该引脚,并且TRISx位配置该引脚为输出,则将锁存器内的数据输出到引脚。


在复位状态下,TRISx的复位值为0xff,即TRISx寄存器的8个位(D0 ~ D7)的值均为1。此时相应的PORTx引脚被定义为输入,相应的输出驱动器呈现高阻状态。设置为0时表示相应的引脚定义为输出。

PIC18F4550单片机三个操作寄存器的使用方法

这里应注意的是写PORT就是写LAT,但读PORT和读LAT不同。读PORT读的是引脚的状态,无论该引脚设置为输入引脚还是输出引脚。而读LAT得到的是输出数据锁存器的存储值,读LAT得到的值可能和读PORT得到的值存在不同。

PIC18F4550单片机三个操作寄存器的使用方法

在Microchip C18中,I/O端口三个操作寄存器可以按位(bit)操作,也可以按字节(byte)操作。


如端口B的方向寄存器用TRISB(或DDRB)表示,某一位用TRISBbits.TRISB0(或DDRB bits.RB0)表示。字节用TRISB(或DDRB)表示。


如端口B的PORT寄存器用PORTB表示,某一位用PORTBbits.RB0表示。字节用PORTB表示。


如端口B的输出数据锁存器用LATB表示,某一位用LATBbits.LATB0表示。字节用LATB表示。


由于芯片复位后,LATx(PORTx)锁存器的值是随机的,为了排除I/O引脚电平出现毛刺的可能性,在初始化端口时,首先初始化该PORT的数据锁存器(LAT或PORT寄存器),然后再初始化数据方向寄存器TRIS。


下面用一个实例说明一下具体应用,下图PIC18F4550与电源、晶振和发光二极管组成一个最简单的8位单片机系统,要求同时点亮8个发光二极管。

PIC18F4550单片机三个操作寄存器的使用方法

首先可以选择按位操作的方法实现。不难看出,按位操作实际不是真正实现同时点亮与PORTB相连的8个发光二极管,只是发光二极管发光的延时效应掩盖了依次点亮的事实,使得最终效果达到了同时点亮。以下是按位操作方式的实现代码。

#include

void main(void)

{

PORTBbits.RB0=1;

TRISBbits.TRISB0=0;//点亮第1个LED

PORTBbits.RB1=1;

TRISBbits.TRISB1=0; //点亮第2个LED

PORTBbits.RB2=1;

TRISBbits.TRISB2=0; //点亮第3个LED

PORTBbits.RB3=1;

TRISBbits.TRISB3=0; //点亮第4个LED

PORTBbits.RB4=1;

TRISBbits.TRISB4=0; //点亮第5个LED

PORTBbits.RB5=1;

TRISBbits.TRISB5=0; //点亮第6个LED

PORTBbits.RB6=1;

TRISBbits.TRISB6=0; //点亮第7个LED

PORTBbits.RB7=1;

TRISBbits.TRISB7=0; //点亮第8个LED

while(1);

}

其次可以按字节操作来实现,代码比按位操作要简单很多,而且真正实现了同时点亮的要求。以下是按字节操作方式的实现代码。

#include

void main(void)

{

PORTB=0xff;

TRISB=0x00;//点亮8个LED

while(1);

}

推荐阅读

史海拾趣

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

迦美信芯(CanaanTek)公司的发展小趣事

迦美信芯通讯技术有限公司成立于2008年,总部位于被誉为“中国硅谷”的上海张江高科技园区。自成立以来,公司便专注于射频领域集成电路的研发和销售。凭借对技术的深入理解和不懈追求,迦美信芯逐渐在射频前端市场占据了一席之地。

Alliance Memory公司的发展小趣事

迦美信芯一直致力于技术创新和产品升级。公司推出的面向手机终端和物联网的2G/3G/4G/5G全系列的射频开关、天线调谐器、低噪声放大器等产品,在行业内具有较高的知名度和美誉度。特别是在天线调谐器领域,迦美信芯已成为国内设计出天线调谐器芯片并大量量产的厂家之一。

Communications & Power Industries公司的发展小趣事

随着全球化进程的加速,CPI意识到要想在电子行业中取得更大的发展,必须积极拓展国际市场。公司积极寻求与国际知名企业的合作机会,通过技术共享和市场合作,成功打开了多个海外市场。同时,CPI还加强了与国际研究机构的合作,不断引进先进的技术和管理经验,提升了自身的竞争力。这些国际合作不仅为CPI带来了更多的商业机会,也推动了公司在全球范围内的品牌传播和市场拓展。

Broyce Control公司的发展小趣事

进入21世纪,Broyce Control已经成为电气和电子产品设计、制造和供应领域的佼佼者。公司不仅在技术上持续创新,还注重与行业伙伴的合作与交流。通过参与国际标准的制定和推广,Broyce Control逐渐在行业内树立了领导地位。同时,公司还积极承担社会责任,推动可持续发展和环保理念的实践,为行业的健康发展做出了积极贡献。

BROTHER公司的发展小趣事

BROTHER公司的历史可以追溯到1908年,当时安井兼吉在名古屋市开设了工业缝纫机维修及零部件生产的“安井缝纫机商会”。随着时间的推移,公司逐渐发展成为缝纫机领域的领导者。然而,BROTHER并没有满足于在缝纫机领域的成功,而是开始寻求跨界发展的机会。上世纪中叶,随着电子技术的兴起,BROTHER开始利用其在机械制造和精密加工方面的技术优势,涉足电子产品领域。通过不断研发和创新,BROTHER成功推出了一系列电子产品,逐渐在电子行业崭露头角。

问答坊 | AI 解惑

赛灵思ISE 设计套件 11.1 白皮书

作者:Michael Santarini 随着 Xilinx® ISE® 设计套件 11.1 的推出,赛灵思在优化设计方法、更好地满足不同技能客户的多样化需求, 以及帮助客户利用赛灵思 FPGA 目标设计平台进行创新设计方面迈出了一大步。赛灵思 ISE 设计套件 11.1同时 ...…

查看全部问答>

首块双曲面车顶太阳能电池英利问世

英利集团宣布:历经5个多月攻关,英利光伏应用技术研究院自主研发出全球第一块双曲面车顶用光伏电池板。 据介绍,这种电池板具有专利技术和自主知识产权,可将太阳能转化为电能储存在汽车蓄电池内,功率为180瓦。车顶安装光伏电池板的汽车依靠 ...…

查看全部问答>

关于函数写法与编译结果的讨论

请分析下面的结果: 1:函数  XX(结构体变量)2:函数  XX(结构体指针) 分别调用两个函数,请问在程序编译后,结果是否一样? 如果不一样为什么?…

查看全部问答>

我也来玩玩多线程

看着chenzhufly把多线程Photothreads在LPC1343上玩的有声有色,有贴为证https://bbs.eeworld.com.cn/viewthread.php?tid=103789,我也禁不住要试试。因为LPC1114同样资源紧张,呵呵 下面就一试。 同样我也参考了Photothreads的例程example-small, ...…

查看全部问答>

关于实时绘制手写笔轨迹的一个小问题

做了一个手写识别软件,用伪驱动的方法截获了全屏书写的轨迹。用手写笔在屏幕上书写的时候是可以收到轨迹信息的,也可以做出识别,但是手写笔在屏幕上画过的笔迹无法显示,在没有实现全屏书写的时候我在窗口里写实可以实时绘出手写轨迹的。下面是绘 ...…

查看全部问答>

找两名兼职的WinCE内核和驱动开发人员

找两名兼职的WinCE内核开发人员,要求熟悉Marvell Xscale 系列CPU的内核和驱动开发工作, 要求熟悉一款以上以下的CPU: PXA255,PXA270,PXA310,PXA300,PXA320,PXA168. 地点在北京.有PDA或智能手机开发经验的人最佳. 熟悉三星的S3C6410的也可以,我 ...…

查看全部问答>

NK.nb0文件是否包含有起始地址信息?

我知道NK.bin文件头中是包含有NK的起始地址信息的,不知道nb0文件是否有? 我现在想通过NK.nb0进行升级,但是升级后需要保存NK.nb0拷贝到内存的地址到NAND Flash中,不知道NK.nb0文件是否有这个信息?…

查看全部问答>

关于高速AD采样的系统设计问题

  各位高手,本人基于课题需要,打算开发设计一个高速AD采样系统, 也许需要外检测电路+独立AD模块+嵌入式CPU组合实现 主要有以下要求: 1. AD模块的采样+转换时间=10MHz 2. CPU工作主频足够高,CPU内开辟一个足够大的缓存区,通过 ...…

查看全部问答>

ST编译设置问题

在用ST工程时,编译设置改为: Memory 选择 Long Stack(+modsl) 就会出现下面问题: #error clnk Debug\\stm8s208.lkf:1 symbol f__stext not defined(Debug\\stm8_interrupt_vector.o ) The command: "clnk -m Debug\\stm8s208.map -l"C ...…

查看全部问答>