亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区

Easy-Downloader V1.1 with SDCC

2016-07-05 15:37

Easy-Downloader V1.1 with SDCC 
     I am very happy to use sdcc for writing firmware of my project. The compiled code is very compact and nice. After I succeeded writing a new firmware of xtimer and Easy-downloader V1.1 with sdcc. I cannot stop preparing a new page that gives the idea how to use sdcc and of course it's time to renovate my old project with orcad. For now I can design the hardware, draw a schematic, write the firmware and layout the pcb. So I think why shouldn't begin with Easy-Downloader. Since the programmer board will enable learning and developing the small project with a cheap 20-pin MCU easily.
 

Easy-Downloader V1.1 with SDCC

 

Figure 1: Complete hardware schematic of Easy-Downloader V1.1 ( see errata below).
easy1_3.pdf
 

Hardware
 

The hardware has a bit change at rs232 level converter. Now the circuit uses a popular rs232 level converter, MAX232. Also I cut the bridge diode at the DC input, now I use only one diode to prevent wrong polarity of a given DC adapter.
 

Layout
 

The pcb layout was made with orcad Layout Plus. The gerber file is available at download section below. Here I like to show how nice it is. The top and bottom layers are shown in Figure 2 and Figure 3. Figure 4 shows the component placement layout.
 

Easy-Downloader V1.1 with SDCC
 

Figure 2: Top layer pcb x2 size.
 

Easy-Downloader V1.1 with SDCC
 

Figure 3: Bottom layer pcb x2 size.
 
 

Easy-Downloader V1.1 with SDCC
 
 

Figure 4: Component placment layout.
 

Bill Of Materials
 

The component list is shown in Figure 5. U1 the master chip must be programmed with writer1.hex before the programmer board can run properly. Q2 and Q3 are TO92 plastic package! With a CAN package, pin positions may differ on the layout. You can use any small signal transistors to replace them. VB1 is male type!  All resistors can be 1/4W or 1/8W 5%.
 

Bill Of Materials        January 4,2004      10:44:35 Page1

Item Quantity Reference Part
______________________________________________
 

1 2 C1,C2 30pF disceramic
2 2 C8,C3 10uF 16V electrolytic
3 1 C4 10uF 10V electrolytic
4 5 C5,C6,C7,C12,C13 10uF electrolytic
5 1 C9 470uF 25V electrolytic
6 2 C10,C11 0.1uF multilayer
7 2 C14,C15 0.1uF multilayer
8 1 D1 POWER small red LED for power indicator
9 1 D2 1N4007 silicon rectifier diode
10 1 J1 DC jack 
11 1 Q1 11.0592MHz low profile crystal
12 1 Q2 2N2907 PNP small signal transistor
13 1 Q3 2N2222A NPN small signal transistor
14 5 R1,R3,R6,R10,R11 10K
15 1 R2 250
16 1 R4 1150
17 1 R5 2150
18 1 R7 4.7k
19 1 R8 1k
20 1 R9 2k
21 1 U1 AT89C2051 20-pin DIP Microcontroller with 2kB Flash
22 1 U2 74LS373 D-type FF
23 1 U3 20-pin ZIF (Zero-Insertion-Force) socket
24 1 U4 LM317/TO adjustable regulator
25 1 U5 MAX232A 16-pin DIP RS232 level converter
26 1 U6 LM7805/TO fix +5V voltage regulator
27 1 VB1 SUB-D 9 (male) for NULL CABLE    DB9 connector
 


 

Figure 5: Component list.
 

Software
 

sdcc has the header file that declares bit variables and we can use them in program directly. We can define the specified bits as below,
 


#define LM317 P3_5
#define LE P3_7
#define prog P3_2
#define rdy P3_3
#define xtal P3_4
#define p10 P1_0
#define p11 P1_1
#define p12 P1_2
#define p13 P1_3
#define p14 P1_4

 
In c program, we can use assignment statement to set or clear them directly. For instance, function that makes low to high transition at P3.2,
 

pulseProg()
{
 prog = 0;
 prog = 0;
 prog = 0;
 prog = 1;
}
The ASCII strings were defined with modifier, 'code', so the compiled code will place them in code memory space.

char code title[] = '\n\r Easy-Downloader V1.3 for ATMEL 89C2051/4051 (sdcc version)';
char code prompt[] = '\n\r >';
char code ok[] = '\n\r ok';
 

I have built function that print string to terminal, to make it compatible with the old version with Micro-C. Look at the source cod here,
 


putstr(char *s)
{
 char i=0;
 char c;
 while((c=*(s+(i++)))!= 0) putchar(c); // while byte is not terminator, keep sending
}

 
The pointer s points to the start address of string. It will send character to serial port with function putchar while the character is not the terminator byte!

Sdcc has no putchar( ) function, so we must build it before we can use. I wrote a simple putchar( ) as my assembly code.
 

void putchar(char c)
{
 while(!TI); 
 TI=0;
 SBUF = c;
}

 
We test TI bit before we can write a byte to SBUF. While TI is not set (buffer is not free) keep polling it, when it set, clear it and write a byte to SUF.

The same as putchar( ) function, I had built the getchar( ) for this board to make it compatible with old version.
 

char getchar(void)
{
 char c;
 while(!RI);
 RI =0;
 c = SBUF;
 putchar(c);    // echo to terminal
 return SBUF;
}

 
Now the code polls the RI bit, when it set, clear it and read SBUF and simply echo the received character with putchar( ) function.

The important function is getnum ( ) function. Let me explain how it works?
 

unsigned int getnum()
{
    char s[6]; 
    char c;
    char i;
    unsigned int temp16; 
 c = 0;
 i=0;
  for (i = 0; c != 0xa; i++) // loop until CR has entered
    { 
        putchar(xon); // send xon to signal host to send byte
        c = getchar(); // get character from serial port
  if(c == 0xd) c=0xa; // convert CR to LF to make it compatible with ez31 and ez41
        s[i] = c; // save character to array
    }
    s[i-1] = 0; // put terminator at the end of string

// convert ascii to integer (atoi(s))
  temp16 = 0;
 for(i=0; s[i] != 0; i++) temp16 = 10*temp16 + s[i]-'0';
    return temp16; // return 16-bit for number of byte counting
}
 


 
Look at the red one, it is a simple for loop with condition to check the received character is NEWLINE or not. If not it will save the character being received to array s[i]. The putchar(xon) sends the xon to host to let it know the board is ready to receive a byte. The getchar( ) is not echo the received byte. However it converts CF to LF. When the loop found LF or 0xa, it will exit from the for loop and save terminator byte to s[i-1].

The ascii string that saved in array s[] will be converted to 16-bit number with atoi code.
 

Most of the high level code are the same as previous version with Micro-C. You may study them in the source code then.
 

Let me shows you how to use sdcc to compile the source code again. The sample below uses batch file, s.bat.
 

C:\sdcc\app>s

C:\sdcc\app>path=c:\sdcc\bin
 

C:\sdcc\app>sdcc writer1.c
 

library file /sdcc/share/sdcc/lib/small/libsdcc.lib
library file /sdcc/share/sdcc/lib/small/libint.lib
library file /sdcc/share/sdcc/lib/small/liblong.lib
library file /sdcc/share/sdcc/lib/small/libfloat.lib
 

C:\sdcc\app>packihx writer1.ihx>writer1.hex
packihx: read 166 lines, wrote 75: OK.
 

C:\sdcc\app>
 


 
The batch file s.bat contains,

path=c:\sdcc\bin
sdcc writer1.c
packihx writer1.ihx>writer1.hex
 

The output machine code is hex file with *.ihx extension. We can use a tool, packihx to convert such hex file with *.ihx to *.hex easily.
 

The ez4.1 is suitable for programming the hex file into a 20-pin microcontrollers, 89C2051/4051. Since the hex file produced by sdcc is not sorted from low address to high address. The old version, EZ31 has bug for such hex file. So I recommened to use EZ4.1 for program loading.
 

Easy-Downloader V1.1 with SDCC

 

  • schematic:  
  • Layout in pdf:    
  • c compiler for 8051:   
  • firmware:  
  • HEX file:    
  • EZDL4:  
  • orcad files (schematic, layout):    
  • gerber file:    


資料下載.rar
 

Errata
 

  • 18 March 2004: found hardware schematic error at MAX232. The error is that pin 2 on the D-SUB 9 connector must be connected to pin 13 on the MAX232, not pin 8. The error had reported by Henrik Olesen, student at the University of Southern Denmark.

    Below picture shows how to modify the pcb!
    Easy-Downloader V1.1 with SDCC

Easy-Downloader V1.1 with SDCC


亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
9i看片成人免费高清| 亚洲午夜视频在线观看| 亚洲开发第一视频在线播放| 狠狠久久综合婷婷不卡| 国产日韩一区| 国产欧美va欧美不卡在线| 欧美午夜电影一区| 欧美揉bbbbb揉bbbbb| 欧美日韩 国产精品| 欧美精品电影| 欧美激情综合五月色丁香小说| 久久综合图片| 另类av一区二区| 男人的天堂成人在线| 欧美成人精品在线观看| 欧美成人免费在线视频| 欧美99在线视频观看| 欧美韩国日本综合| 欧美日本一区二区视频在线观看 | 久久中文字幕一区| 99pao成人国产永久免费视频| 欧美日韩国产不卡| 欧美色视频日本高清在线观看| 欧美视频在线观看免费网址| 国产精品久久久久久超碰| 国产精品爽黄69| 国产在线精品自拍| 亚洲国产精品久久久| 日韩视频在线观看免费| 正在播放亚洲| 欧美一区二区播放| 亚洲国产美女久久久久| 99国产成+人+综合+亚洲欧美| 国产精品99久久久久久有的能看 | 亚洲精品1234| 99re6这里只有精品| 亚洲色图综合久久| 午夜精品久久久久久久白皮肤| 久久大逼视频| 亚洲精品一区中文| 亚洲一区中文| 久久久久久久一区二区| 欧美福利一区| 国产精品乱码妇女bbbb| 国产日韩欧美三区| 亚洲福利视频在线| 亚洲私人影院在线观看| 久久成人一区| 亚洲视频一区| 久久理论片午夜琪琪电影网| 欧美激情综合在线| 国产美女搞久久| 亚洲电影免费观看高清完整版在线观看 | 一区二区三区在线免费视频| 99精品黄色片免费大全| 午夜久久影院| 日韩一级片网址| 久久狠狠婷婷| 欧美精品18| 国内成+人亚洲| 一区二区三区精品视频在线观看| 欧美一级片在线播放| 99视频日韩| 久久久中精品2020中文| 欧美午夜国产| 亚洲国产成人在线| 亚洲欧美久久久| 99精品欧美| 久久久久国产精品人| 欧美日韩一二区| 精品999久久久| 中文有码久久| 亚洲精品在线观| 亚洲精品在线视频观看| 99国产精品视频免费观看一公开| 欧美亚洲在线播放| 亚洲视频在线观看视频| 免费黄网站欧美| 国产日韩精品入口| 一区二区三区四区精品| 亚洲毛片在线| 毛片一区二区三区| 国产午夜精品在线观看| 一本久久综合| 99精品福利视频| 免费一级欧美片在线观看| 国产精品一区久久| 在线亚洲免费视频| 99re热精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美精品一区二| 在线观看亚洲精品视频| 新狼窝色av性久久久久久| 亚洲一区自拍| 欧美日韩另类丝袜其他| 亚洲国产一区二区三区a毛片| 久久精品一区四区| 欧美自拍偷拍午夜视频| 国产精品亚洲综合一区在线观看| 夜夜嗨av一区二区三区网站四季av| 亚洲日韩欧美视频| 美女视频网站黄色亚洲| 国产一区二区剧情av在线| 午夜在线电影亚洲一区| 午夜精品久久久久久久蜜桃app| 欧美日韩三级| 日韩天堂在线视频| 日韩一二三在线视频播| 欧美精品日韩一区| 亚洲人成啪啪网站| 亚洲人成绝费网站色www| 美女主播一区| 在线播放日韩欧美| 亚洲日本免费电影| 欧美成人首页| 亚洲人成人77777线观看| 日韩亚洲欧美精品| 欧美日韩国产系列| 日韩亚洲一区二区| 亚洲一区二区三区在线看| 国产精品yjizz| 亚洲一区二区精品在线观看| 午夜久久影院| 国产欧美一区二区视频| 亚洲欧美日韩精品一区二区| 欧美一区二区三区免费在线看| 国产精品美女主播| 亚洲欧美韩国| 久久久精品欧美丰满| 激情一区二区三区| 欧美日韩一区二区三区在线看| 性欧美18~19sex高清播放| 99视频国产精品免费观看| 欧美日韩国产综合新一区| 一本色道久久综合狠狠躁的推荐| 亚洲无线一线二线三线区别av| 国产精品久久福利| 亚洲欧美另类中文字幕| 久久久久久久97| 永久555www成人免费| 亚洲另类视频| 欧美三级免费| 亚洲欧美电影院| 久久久久久久一区二区| 亚洲国产欧美不卡在线观看| 亚洲一区二区成人| 国产精品亚洲精品| 亚洲福利视频专区| 欧美激情影院| 亚洲免费在线看| 久久久久成人精品| 亚洲激情电影在线| 亚洲香蕉网站| 国产欧美日韩伦理| 91久久久久久久久久久久久| 欧美日韩亚洲一区二区三区在线观看 | 亚洲日韩欧美视频一区| 亚洲直播在线一区| 国产一区二区三区网站 | 久久精品国产亚洲a| 亚洲国产日韩欧美在线99| 亚洲综合日韩在线| 一区精品久久| 亚洲欧美日韩电影| 一区视频在线看| 亚洲欧美国产高清| 在线欧美日韩| 性欧美办公室18xxxxhd| 亚洲大胆人体在线| 亚洲欧美国产精品va在线观看| 好男人免费精品视频| 一区二区三区你懂的| 国产午夜精品在线观看| 99日韩精品| 国外成人在线视频| 一区二区三区四区五区视频| 国产一区激情| 中文国产成人精品| 激情亚洲网站| 午夜精品国产更新| 亚洲国产专区| 久久久精品免费视频| 99xxxx成人网| 毛片基地黄久久久久久天堂| 亚洲一区精品电影| 欧美精品久久一区| 亚洲高清不卡| 国产精品人人做人人爽人人添| 亚洲精品激情| 国产色综合久久| 亚洲性感美女99在线| 在线观看欧美一区| 久久激情中文| 一区二区福利| 欧美韩国一区| 午夜精品久久久久久99热| 亚洲三级电影全部在线观看高清| 欧美四级电影网站| 日韩系列欧美系列| 在线观看国产成人av片|