Thông báo

Collapse
No announcement yet.

hướng dẫn viết chương trình nạp cho 89c51

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • hướng dẫn viết chương trình nạp cho 89c51

    chào các bạn
    mình định tự làm một mạch nạp cho vdk 89c51
    dự định giao tiếp với pc thông qua usb (COM ảo)
    phần usb to com dự định dùng pl2303
    dự định viết giao diện bằng vc++ hoặc vb
    bác nào có tài liệu gì về vấn đề này thì cho mình xin nhé
    cảm ơn các bạn

  • #2
    có nhiều lựa chọn trên mạng hết rồi mà sao phải làm thêm nữa ? chú tính thêm cái gì mới à

    Comment


    • #3
      không anh ạ
      em chỉ muốn tìm hiểu cho thỏa lòng thôi chứ không có
      ý định làm thương mại hay gì cả ạ
      tại em chuyển từ CNTT sang nên thấy cũng có chút kiến thức về lập trình nên tính làm cho vui thôi anh ạ
      nếu anh có tài liệu gì thì cho em xin
      em cảm ơn nhiều

      Comment


      • #4
        quá trình nạp thì do ko có nhu cầu nên mình ko có tìm hiểu vì thế ko có tài liệu.
        Mà cũng ko cần thiết phải tìm hiểu cái này, nếu chú muốn thỉ nên làm cái gì đó giao tiếp máy tính nó cũng tương tự thôi.

        Comment


        • #5
          vâng em đã làm giao tiếp với máy tính rồi ạ
          em đã thử với com ảo (thông qua cáp nạp nhạc chuông cho 1202) sử dụng pl2303
          gửi, nhận ok
          nay muốn làm cái này
          nhưng không có tài liệu cụ thể lắm
          vốn tiếng anh lại không có nên gặp nhiều khó khăn
          mình cũng nghĩ đơn giản chỉ là các mức điện áp quy định
          sau đó gửi dữ liệu ra thôi
          cái cần bây giờ là tài liệu anh ạ

          Comment


          • #6
            Cái này lên trang atmel tìm tại liệu thôi , nó có mấy chuẩn nạp đó // hoặc spi

            Comment


            • #7
              vâng cảm ơn tất cả các bác
              trong datasheet có tài liệu luôn
              mỗi tội em ngu tiếng anh quá nên chắc còn lâu mới hiểu được
              khi nào em hiểu được hay hoàn thành thì sẽ post thành quả lên chia sẻ với ace
              cảm ơn các ace một lần nữa
              à dạo này em thấy có hiện tượng nếu em dùng google chrome thì vào 4r rất hay bị lỗi font chữ còn dùng ff thì không sao
              có bác nào biết tại sao không ạ

              Comment


              • #8
                tiếng anh tìm mấy cái chỗ quan trọng thôi chứ đọc hiểu hết sao đc
                ko phải do chorm lỗi đâu, hôm nọ k biết có kích linh tinh ko mà cái font nó chuyển sang tiếng anh thế là die hết. bạn kéo xuống góc trái bên dưới chọn tiếng việt phần Language ý
                Website chính thức đổi địa chỉ website thành
                Mời các bạn ghé thăm !!!

                Comment


                • #9
                  cảm ơn bạn
                  mình đã khắc phục được vấn đề font chữ
                  còn cái ý tưởng kia thì chắc còn lâu lắm

                  Comment


                  • #10
                    thấy vấn đề này có vẻ hơi khó nên đang chuyển sang làm mạch nạp và chương trình nạp cho 89Sxx dạng ISP
                    có vẻ khá khả quan
                    đã hiểu các vấn đề giao tiếp với COM
                    định dạnh file HEX intel
                    ...
                    đang cố gắng
                    có thành quả gì mới sẽ thông báo
                    mong anh em chia sẻ
                    cảm ơn tất cả ace
                    Attached Files
                    Last edited by kidteam; 30-03-2012, 23:55.

                    Comment


                    • #11
                      em đã viết code cho con master
                      khi nhận được tín hiệu từ cổng com sẽ thi hành các lệnh tương ứng
                      co như sau
                      Code:
                      #include <regx51.h>
                      #define uchar unsigned char
                      #define RST P1_4
                      #define MISO P1_6
                      #define MOSI P1_7
                      #define SCK P1_5
                      //#define LED P1_4
                      uchar rev;
                      uchar adr1,adr2;
                      //uint adr;
                      uchar buff[6];
                      uchar dbuff[3];
                      //uchar dbuff[2];
                      uchar count;//dem so luong neu da du thi ok ghi ra thoi
                      //============================================
                      //void delayms(unsigned int );
                      void SendCom(uchar u);
                      uchar GetCom(void);
                      void SetPE(void);
                      void Delay(void);
                      void SendByte(unsigned char c);
                      unsigned char RcvByte(void);
                      void WriteByte(uchar c,uchar d1,uchar d2);
                      uchar ReadByte(uchar d1,uchar d2);
                      unsigned char Hex2Int(unsigned char c1,unsigned char c2);
                      void SCK1(void);
                      void SCK0(void);
                      //============================================
                      void main(void)
                      {
                      	//khoi tao truoc
                      	//chu y khoi tao cho bo dinh thoi 0
                      	//che do 8 bit tu dong nap lai
                      	//uchar i;
                      	TMOD=0x22;
                      	TH1=TL1=0xFD;
                      	SCON=0x50;
                      	TR1=1;
                      	//khoi tao xong
                      	count=0;
                      	while(1)
                      	{
                      		rev=GetCom();
                      		//thu lai bang cach test nhu the nay
                      		//dau tien neu nhan duoc ky tu s thi RST =1
                      		//delay
                      		//kiem tra neu rst=1 thi cho sang den
                      		//nguoc lai thi tat den
                      
                      		switch(rev)
                      		{
                      			case 'S':
                      				SetPE();
                      				
                      
                      				SendCom('O');
                      				WriteByte(0,0,78);
                      				count=0;
                      				break;
                      			
                      			case 'P':
                      				count=0;
                      				RST=0;
                      				//thoat khoi che do lap trinh
                      				/*
                      				RST=0;
                      				for(i=0;i<200;++i)
                      					Delay();
                      				if(RST)
                      					//bat den
                      					LED=0;
                      				else
                      					LED=1;
                      				*/
                      				SendCom('O');
                      				break;
                      			case 'N':
                      				count=0;
                      				SendCom('O');
                      				break;
                      			case 'L':
                      				count=0;
                      
                      				SendCom('O');
                      				break;
                      			default:
                      				buff[count]=rev;
                      				++count;
                      				if(count==6)
                      				{
                      					count=0;
                      					//khi co du so luong byte thi ghi thoi
                      					//ghi du lieu thoi
                      					//bat dau chuyen du lieu sang thooi
                      					dbuff[0]=Hex2Int(buff[0],buff[1]);//chua dia chi cao
                      					dbuff[1]=Hex2Int(buff[2],buff[3]);//chua dia chi thap
                      					dbuff[2]=Hex2Int(buff[4],buff[5]);
                      					WriteByte(dbuff[2],dbuff[0],dbuff[1]);
                      					//thu tu nhan duoc tu PC la dia chi cao, dia chi thap, du lieu
                      				}
                      				SendCom('O');
                      				break;
                      			
                      		}
                      	}
                      }
                      void SendCom(uchar u)
                      {
                      	TI=0;
                      	SBUF=u;
                      	while(!TI);
                      	TI=0;
                      	//
                      }
                      uchar GetCom(void)
                      {
                      	uchar u;
                      	RI=0;
                      	while(!RI);
                      	u=SBUF;
                      	RI=0;
                      	return u;
                      }
                      void Delay(void)
                      {
                      	TF0=0;
                      	TR0=0;
                      	TH0=210;
                      	TR0=1;
                      	while(!TF0);
                      	TF0=0;
                      	TR0=0;
                      }
                      void SetPE(void)
                      {
                      	//dua Slv vao mode lap trinh theo y minh
                      	//dau tien dat RST len cao
                      	uchar i;
                      	RST=1;
                      	
                      	//delay 10ms
                      	//uchar j;
                      	SCK0();
                      	for(i=0;i<10;++i)
                      		Delay();
                      	//dam bao thoi gian du lau de dua vao che do PE
                      	//gui chi thi cho phep che do lap trinh noi tiep
                      	SendByte(0xAC);//gui byte sau tien
                      	SendByte(0x53);
                      	SendByte(0x00);
                      	SendByte(0x00);
                      	for(i=0;i<10;++i)
                      		Delay();
                      	//chu y gui lien tiep
                      	//gui xong thi chip da duoc dua vao che do lap trinh
                      	//gui chi thi xoa chip luon
                      	SendByte(0xAC);
                      	SendByte(0x82);
                      	SendByte(0x00);
                      	SendByte(0x00);
                      	//gui xong chi thi xoa chip
                      	//coi nhu chip da duoc xoa
                      	//Delay();
                      	//can kiem tra xem co can thiet hay khong
                      	//theo quan diem ca nhan thi khong can
                      	
                      }
                      void SendByte(uchar c)
                      {
                      	uchar i;
                      	//phan kho khan nhat chinh la chuong trinh nay day
                      	//i=8;//bieu thi 8 byte;
                      	//dau tien luon dam bao SCK o muc thap
                      	//SCK=0;
                      	//bat dau dua bit du lieu vao
                      	for(i=0;i<8;++i)
                      	{
                      		//c>>=1;
                      		SCK0();
                      		if(c&128)
                      		{
                      			//truong hop nay la bit cao
                      			MOSI=1;
                      		}
                      		else
                      		{
                      			MOSI=0;
                      		}
                      		c<<=1;
                      		Delay();
                      		SCK1();
                      		Delay();
                      		Delay();
                      		SCK0();
                      		Delay();
                      	}
                      }
                      
                      void WriteByte(uchar c,uchar d1,uchar d2)
                      {
                      	//dau tien mac dinh dang o trong mode lap trinh
                      	SendByte(0x40);
                      	//chi thi ghi
                      	SendByte(d1);
                      	SendByte(d2);
                      	SendByte(c);
                      }
                      unsigned char Hex2Int(unsigned char c1,unsigned char c2)
                      {
                      	unsigned char ret;
                      	c1-='0';
                      	c2-='0';
                      	if(c1>9)
                      		c1-=7;
                      	if(c2>9)
                      		c2-=7;
                      	ret=c1;
                      	ret<<=4;
                      	ret|=c2;
                      	return ret;
                      }
                      /*
                      void delayms(unsigned int imsec)
                      {
                      	int i,j;
                      	for(i=0;i<imsec;i++)
                      		for(j=0;j<1275;j++);
                      }
                      void SendBit(bit b)
                      {
                      	MOSI=b;
                      	delayms(1);	
                      }
                      */
                      void SCK1(void)
                      {
                      	SCK=1;
                      	while(!SCK);
                      }
                      void SCK0(void)
                      {
                      	SCK=0;
                      	while(SCK);
                      }
                      em kiểm tra bằng cách dùng Terminal gửi các ký tự điều khiển ra cổng com
                      đầu tiên dùng mạch nạp sunrom để nạp vào con slaver
                      sau đó cắm 'mạch nạp' tự chế này vào
                      em gửi 'S' để đưa slaver vào chế độ lập trình và xóa chip
                      sau đó em rút con slaver ra cắm lại vào mạch nạp sunrom kiểm tra
                      chương trình báo chip trắng, chứng tỏ đoạn lệnh xóa chip hoạt động đúng
                      nhưng khi em thử lại mạch nạp tự chế bằng cách ghi thử 1 byte bất kỳ vào
                      thì không được
                      bác nào có hứng thú thì giúp em với
                      kiểm tra giúp em xem đoạn code ghi vào bộ nhớ bị sai chỗ nào
                      em đọc trong datasheet của 89s52 thì thấy thế này
                      các bác xem em có hiểu nhầm chỗ nào không
                      chế độ lập trình nối tiếp của 89s52 thông qua giao thức ISP
                      thông qua các chân SCK,MISO,MOSI trong khi RST được kéo lên Vcc
                      sau khi RST được kéo lên cao thì chỉ thị đưa 89s vào chế độ lập trình được thực thi đầu tiên
                      sau đó cần thực thi chỉ thị xóa chip điền đầy bộ nhớ bằng 0xFF
                      tần số SCK<=1/16 tần số thạch anh của Slaver
                      các chỉ thị lập trình như trong bảng...
                      em không hiểu em sai ở chỗ nào
                      mong các bác giúp em với
                      thank tất cả các ace
                      Attached Files

                      Comment

                      Về tác giả

                      Collapse

                      kidteam Tìm hiểu thêm về kidteam

                      Bài viết mới nhất

                      Collapse

                      • Ng.Phuong.5
                        Khi in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau.
                        Không biết có ai sửa được vấn đề này không ạ? Hay đây là mặc định của orcad 9.2 rồi ạ ?
                        Các cách em xem trên diễn đàn thử rồi nhưng không được ạ...
                        hôm nay, 19:47
                      • Ng.Phuong.5
                        Khi in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Không biết...
                        hôm nay, 19:45
                      • Ng.Phuong.5
                        Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Không biết...
                        hôm nay, 19:45
                      • Ng.Phuong.5
                        Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Mấy con...
                        hôm nay, 19:44
                      • viettinh
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi viettinh
                        Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                        Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                        hôm nay, 18:12
                      • nguyendinhvan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi nguyendinhvan
                        Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                        Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                        Cách đơn giản...
                        hôm nay, 00:04
                      • Ng.Phuong.5
                        Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                        bởi Ng.Phuong.5
                        Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                        Mấy con...
                        Hôm qua, 22:44
                      • mèomướp
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi mèomướp
                        Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                        Hôm qua, 19:02
                      • tuyennhan
                        Trả lời cho Sửa bộ nguồn DC 60V 45A
                        bởi tuyennhan
                        Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                        Hôm qua, 15:43
                      • tuyennhan
                        Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                        bởi tuyennhan
                        Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                        Hôm qua, 15:28
                      Đang tải...
                      X