搜索
bottom↓
回复: 5

做了个M16的EEPROM的读写实验,汇编的,大家斧正下 ;)

[复制链接]

出0入0汤圆

发表于 2006-6-27 16:23:59 | 显示全部楼层 |阅读模式
做了个M16的EEPROM的读写实验,汇编的,大家斧正下

硬件电路:

M16的PA口接8个发光二极管到VCC.

先贴个图片来看看,手工制作的,有点丑,将就看吧 ;)









程序代码如下,是汇编写的:

.include "m16def.inc"

.org $0000                                ;系统复位

        rjmp RESET

.org $002A                                ;跳过中断区

RESET:

        ldi r16,high(ramend)                   ;设置堆栈指针

        out sph,r16

        ldi r16,low(ramend)

        out spl,r16



        ser r16                        ;置位r16

        out ddra,r16                ;设置PA口为输出

        out porta,r16                ;设置PA口为高电平

       

        ldi r20,0xff                ;设置延时参数

        ldi r19,0x00                ;设置写入参数

        ldi r18,0x00                ;设置EEPROM地址高位

        ldi r17,0x00                ;设置EEPROM地址低位

write:                                ;初始化EEPROM(格式:00,00,01,00,02,00,03,00,...,FF,00)

        rcall flick_init                   ;EEPROM初始化前提示:PA口闪烁四次

        ldi r16,0xFE                ;初始化开始,PA口显示:11111110,亮第一个灯

        out porta,r16

init_began:       

        mov r16,r19                ;写R19到EEPROM

        rcall EEPROM_write

        inc r17                        ;写0x00到EEPROM

        ldi r16,0x00

        rcall EEPROM_write

        inc r17

        cpi r17,0x00

        brne init_next

        inc r18

        cpi r18,0x02

        brne init_next

        rjmp init_end

init_next:

        inc r19

        cpi r19,0x00

        brne init_began

init_end:

        ldi r16,0x7f                ;初始化结束,PA口显示:01111111,亮最后一个灯

        out porta,r16

        rcall delay

        rcall delay

        rcall delay

        rcall delay

        ldi r18,0x00                ;初始化EEPROM地址

        ldi r17,0x00

        rcall flick_desplay                   ;PA口灯闪烁,读取EEPROM前的提示

desplay:

        rcall EEPROM_read

        out porta,r16

        rcall delay

        inc r17

        cpi r17,0x00

        brne desplay

        inc r18

        cpi r18,0x02

        brne desplay

        ldi r18,0x00

        rcall flick_desplay                  ;重新遍历EEPROM前PA口灯闪烁提示

        rjmp desplay





;子函数区



EEPROM_read:                        ;EEPROM读操作

        sbic EECR,EEWE

        rjmp EEPROM_read

        out EEARH,r18

        out EEARL,r17

        sbi EECR,EERE

        in r16,EEDR

        ret



EEPROM_write:                        ;EEPROM写操作

        sbic EECR,EEWE

        rjmp EEPROM_write

        out EEARH,r18

        out EEARL,r17

        out EEDR,r16

        sbi EECR,EEMWE

        sbi EECR,EEWE

        ret       



delay:                                ;延时函数

                push r20

del1:        push r20

del2:        push r20

del3:        dec r20

                brne del3

                pop r20

                dec r20

                brne del2

                pop r20

                dec r20

                brne del1

                pop r20

                ret

       

flick_init:

        ldi r16,0x00       

        out porta,r16

        rcall delay

        ldi r16,0xff

        out porta,r16

        rcall delay

        ldi r16,0x00       

        out porta,r16

        rcall delay

        ldi r16,0xff

        out porta,r16

        rcall delay

        ldi r16,0x00       

        out porta,r16

        rcall delay

        ldi r16,0xff

        out porta,r16

        rcall delay

        ldi r16,0x00       

        out porta,r16

        rcall delay

        ldi r16,0xff

        out porta,r16

        rcall delay

        ret

flick_desplay:

        ldi r16,0x0f

        out porta,r16

        rcall delay

        ldi r16,0xf0

        out porta,r16

        rcall delay

        ldi r16,0x0f

        out porta,r16

        rcall delay

        ldi r16,0xf0

        out porta,r16

        rcall delay

        ldi r16,0x0f

        out porta,r16

        rcall delay

        ldi r16,0xf0

        out porta,r16

        rcall delay

        ldi r16,0x0f

        out porta,r16

        rcall delay

        ldi r16,0xf0

        out porta,r16

        rcall delay

        ret

出0入0汤圆

发表于 2006-6-27 16:47:56 | 显示全部楼层
不错

出0入0汤圆

 楼主| 发表于 2006-6-28 22:33:58 | 显示全部楼层
重新做了实验,改进了以下几点:

1.用8个数码管显示EEPROM地址和数据

2.使用了T/C中断来控制显示

3.用外部的按键来控制EEPROM的写入和读取显示

硬件电路:

PA口连数码管的段控制

PB口连数码管的位控制

PC口的0,1位连两个按键(按键弹起为高电平,按下为低电平)


-----此内容被zx962032于2006-06-28,22:40:21编辑过

出0入0汤圆

发表于 2010-6-19 22:16:43 | 显示全部楼层
看不懂  mark

出0入0汤圆

发表于 2010-6-20 11:10:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-10-4 10:08:21 | 显示全部楼层
MARK
学习一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 02:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表