打印

OKI M80C49 用什么编程器读程序

[复制链接]
1500|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keen123456|  楼主 | 2012-4-12 23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
keen123456|  楼主 | 2012-4-15 14:45 | 只看该作者
放个代码出来请砖家指点下


#include<stdio.h>
#include<sys/io.h>
#include<unistd.h>

#define BASE 0x378
                                                                              
                                                                              
#define wr(data) (data & 0xcf)
#define rd(data) (data | 0x20)
#define b1off(data) (data & 0xfe)
#define b1on(data) (data | 0x01)

unsigned char read_8049(int addr)
{
                                                                              
   int data, j, a, b, max;
   unsigned char tmp, code;
   unsigned char buff[40];

   /* we read a byte 40 times. why? because there are errors. the error
      rate is as high as 15% when I tested.  Inserting delays can lower
      the error rate, but won't eliminate it.  I removed artificial
      delays after implementing "the redundant read and vote" thing.
    */
   for (j=0; j<40; j++)
   {
        tmp = wr(inb(BASE+2));   // Write
        tmp = b1off(tmp);         // RESET off
        outb(tmp, BASE+2);
        outb((unsigned char)addr, BASE);  // ADDR
        // blink reset
        outb(b1on(inb(BASE+2)), BASE+2);
        outb(b1off(inb(BASE+2)), BASE+2);
        tmp = rd(inb(BASE+2));   // Read
        outb(tmp, BASE+2);
        buff[j] = inb(BASE+4);
   }

   /* find the most frequent one among 40 reads */
   max=0;
   for (j=0; j<40; j++)
   {
        tmp = buff[j];
        a = 0;
        for (b=j; b<40; b++)
        {
           if(buff[b]==tmp) a++;
        }
        if(a > max)
        {
           code = tmp;
           max = a;
        }
   }
   return code;
}

int main()
{
        int i;

        /* initialize */       
        if (iopl(3)) return 1;
       
        for(i=0; i <= 0xff; i++)
                printf("%c", read_8049(i));
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

0

粉丝