8回答

0收藏

单片机I/O操作技巧

STMCU STMCU 4451 人阅读 | 8 人回复 | 2012-10-20

本帖最后由 Kite 于 2012-10-20 13:17 编辑

       玩儿单片机也有一年多了,总感觉自己好像缺点什么东西。总之,电子学道路漫长,还得一步步走下去……

       说了点题外话,下面进入正题。。。

       I/O口作为CPU与外设进行数据传输的重要通道,在单片机系统中起着极其重要的作用。此文中,笔者将根据自己的个人经验介绍一些常用的单片机I/O操作技巧。为了避免读者视觉疲劳,现总结成3个简单的题目,欢迎大家参与讨论


例一:有一16位I/O口PORTx,要求将其高4位和低4位(0000 0000 0000 0000)凑成一个8位数据口控制LCD1602,待发送的数据设为DATA_OUT.请用C语言实现(不超过3条语句,格式参照以下实例)

                     
用51单片机8位并行口时:
/* 此处控制信号代码忽略 */
P0 = DATA_OUT;
/* 此处控制信号代码忽略 */



例二:将例一中的高低4位分别改为[13:10]和[6:3]两个位段(0000 0000 0000 0000)


例三:将例一中高低4位分别改为[13:11]和[6:2]两个位段(0000 0000 0000 0000)



分享到:
回复

使用道具 举报

回答|共 8 个

倒序浏览

沙发

shamowangzi

发表于 2012-10-20 13:35:43 | 只看该作者

不知道移位处理会不会麻烦!

按说移位是最有效率的方式了!
板凳

陈克雄

发表于 2012-10-20 14:05:39 | 只看该作者

shamowangzi 发表于 2012-10-20 13:35
不知道移位处理会不会麻烦!

按说移位是最有效率的方式了!

我一般用的也是移位,你试着把代码写一下,看咱俩想的是不是一样的
地板

shamowangzi

发表于 2012-10-20 15:11:38 | 只看该作者

本帖最后由 shamowangzi 于 2012-10-20 15:17 编辑
Kite 发表于 2012-10-20 14:05
我一般用的也是移位,你试着把代码写一下,看咱俩想的是不是一样的


呵!不是很擅长这方面的操作;
a=(((a<<8) & 0xf0) | (a&0xf)) ;

听说:
a=c/16;
b=c%16;
也可以实现对高四和低四位截取!
5#

陈克雄

发表于 2012-10-20 17:03:21 | 只看该作者

shamowangzi 发表于 2012-10-20 15:11
呵!不是很擅长这方面的操作;
a=(((a

和你的想法类似
我一般也是把数据先分离,然后移到相应位,最后赋给端口寄存器

PORTx = (DATA_OUT/16 <<12) | (DATA_OUT%16)

PORTx = (DATA_OUT&0xf0)<<8 | (DATA_OUT&0x0f)

就是不知道用"/"和"%"和用移位比较哪个比较快,或者说有没有更好的处理方法
6#

shamowangzi

发表于 2012-10-20 17:05:22 | 只看该作者

Kite 发表于 2012-10-20 17:03
和你的想法类似
我一般也是把数据先分离,然后移到相应位,最后赋给端口寄存器

按说用“/”和“%”要经过一次计算!
7#

陈克雄

发表于 2012-10-20 17:15:48 | 只看该作者

shamowangzi 发表于 2012-10-20 17:05
按说用“/”和“%”要经过一次计算!

主要反汇编不怎么懂,没法儿算
8#

WANGW-418912

发表于 2015-8-24 10:58:20 | 只看该作者

要看是那个系列的单片机,
用汇编的半字节交换指令,大部分都有。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条