Em muốn đẩy 4 Byte dữ liệu ra cho 4 chú 595 thì làm thế nào. Em đang dùng CODEversion AVR, các bac giúp em với.(Chú ý em đã hiểu rõ hoạt động của 595)
Thông báo
Collapse
No announcement yet.
đẩy dữ liệu ra 595
Collapse
X
-
đây là chương trình em viết, nó hơi lộn xộn chút.
while (1)
{
z++;y++;
// đành phải dùng thanh ghi portb làm thanh ghi đệm
PORTB=x;
x=t;
// lấy 1 bit dữ liệu đưa ra chân SDA
PORTD.0=PORTB.7;
// tạo một xung đến chân SCL
PORTD.1=1;
delay_ms(100);
PORTD.1=0; // dịch bit
x<<=y;
delay_us(10);
if (z==8){t=0b11111001;
y=0;}
if (z==16){t=0b10100100;
y=0;}
if (z==24){t=0b10110000;
y=0;}
if (z==33){
while (1){};}
// Place your code here
};
}Last edited by mrcuongcon; 19-12-2007, 10:21.
-
Đã hướng dẫn bạn ở trong nàyNguyên văn bởi mrcuongcon Xem bài viếtEm muốn đẩy 4 Byte dữ liệu ra cho 4 chú 595 thì làm thế nào. Em đang dùng CODEversion AVR, các bac giúp em với.(Chú ý em đã hiểu rõ hoạt động của 595)
http://dientuvietnam.net/forums/showthread.php?t=9310
email:mahaco@fpt.vn
Comment
-
//khai báo các chân
#define SHCP PORTB.0
#define STCP PORTB.1
#define DS PORTB.2
void send595(unsigned char byte1,unsigned char byte2,unsigned char byte3,unsigned char byte4)
{
unsigned char i;
unsigned int k;
//send byte thu 1
k=128;//send bit cao nhất đầu tiên.
for(i=0;i<16;i++)
{
if((byte1 & k)==k)
DS=1;//neu bit la 1 thi send 1 ra chan DS
else
DS=0;//Nguoc lai send 0
SHCP=0; //
delay_us(1); //
SHCP=1; //
delay_us(1); // các tín hiệu xung nhịp để 595 dịch giá trị ra ngõ ra
STCP=1; //
delay_us(1); //
STCP=0; //
delay_us(1); //các tín hiệu để ngắt việc gửi bít trước và bắt đầu gửi bít tiếp theo.
k >>= 1; //chuẩn bị cho bít tiếp theo
}
//send byte thu 2
k=128;
for(i=0;i<16;i++)
{
if((byte2 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
//send byte thu 3
k=128;
for(i=0;i<16;i++)
{
if((byte3 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
//send byte thu 4
k=128;
for(i=0;i<16;i++)
{
if((byte4 & k)==k)
DS=1;
else
DS=0;
SHCP=0;
delay_us(1);
SHCP=1;
delay_us(1);
STCP=1;
delay_us(1);
STCP=0;
delay_us(1);
k >>= 1;
}
}
Ban co the tim cach rut gon chuong trinh nay hon.
Comment
-
đây là chương trình em đã viết gọn lại:gửi 1 byte dữ liệu ra 595
dữ liệu là PORTD.0, clock là PORTD.1
k=128;
data=0x0f;// 1 byte dữ liệu cần gửi
for(i=0;i<9;i++)
{
if ((data & k)==k) PORTD.0=1;
else PORTD.0=0;
PORTD.1=0;
PORTD.1=1;
k>>= 1;
}Last edited by mrcuongcon; 23-12-2007, 11:31.
Comment
-
Cậu nên dùng marco của C để định nghĩa các đường kích cho dễ đọcNguyên văn bởi mrcuongcon Xem bài viếtđây là chương trình em đã viết gọn lại:gửi 1 byte dữ liệu ra 595
dữ liệu là PORTD.0, clock là PORTD.1
k=128;
data=0x0f;// 1 byte dữ liệu cần gửi
for(i=0;i<9;i++)
{
if ((data & k)==k) PORTD.0=1;
else PORTD.0=0;
PORTD.1=0;
PORTD.1=1;
k>>= 1;
}
Ví dụ
nếu PORTD.1 là đường latch thì cậu định nghĩa như vậy thì người khác khi nhìn code của cậu viết sẽ có thể sửa lỗi ngay mà không cần phải dò từ đầu chương trình
#define LATCH PORTD.1
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
//chang can delay gi het dau.
#define serin PORTB.5
#define clk PORTB.6
#define sclk PORTB.7
void spi(unsigned char _data)
{
unsigned char i;
for(i=0;i<8;i++)
{
serin=(_data>>i)&0x01;
clk=0;
clk=1;
}
sclk=0;
sclk=1;
}Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
-
Em là thành viên mới tinh, vừa "chào" diễn đàn 10 phút
Em thấy cách giải quyết của bác irf540 là chuẩn nhất
xin góp ý thêm: Fclock của 595 Max = 20MHz nên cần có thêm trễ đối với các AVR dùng tần số làm việc lớn hơn 20MHz
Mong các tiền bối chỉ giáoHôm nay trời nắng chang chang.
Mèo con đi học chẳng mang thứ gì.
Chỉ mang một cái bút chì.
Và mang một mẩu bánh mì con con.
Comment
-
hay gì mà hayNguyên văn bởi traihole Xem bài viếtthe nay hay hon nhieu
sbit Data = P2^2;
sbit Clock = P2^0;
sbit Strobe = P2^4;
void Dieukhien(unsigned char input){
unsigned char i;
Clock = 0;
for(i=0;i<8;i++){
if(input&0x01) Data = 1;
else Data = 0;
input>>=1;
Clock = 1;
Clock = 0;
}
}
riêng mấy cái lệnh IF và ELSE đã thấy thừa thải rồi chớ đừng nói là hay nhât
một bài toán có rất nhiều cách giải quyết nhưng muốn tối ưu nhất là cả vấn đề.soure của tui tuy không hay nhất nhưng chắc là xử lý nhanh hơn đoạn code của bác.
#define serin PORTB.5
#define clk PORTB.6
#define sclk PORTB.7
void spi(unsigned char _data)
{
unsigned char i;
for(i=0;i<8;i++)
{
serin=(_data>>i)&0x01;
clk=0;
clk=1;
}
sclk=0;
sclk=1;
}Cty TNHH Cơ Điện tử Hiệp Phát.
------------------------------------------
Trần Hoàng Giang
11-04-1985
Mobil: 0905 438 533
Comment
Bài viết mới nhất
Collapse
-
bởi theidiotcatViệc lựa chọn một chiếc laptop gaming phù hợp với nhu cầu, ngân sách chưa bao giờ là dễ dàng. Và điều đó càng khó hơn trong năm 2026 khi mà mức giá liên tục tăng.
Nếu bạn chưa biết nên chọn một chiếc laptop gaming như thế nào...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:29 -
-
bởi theidiotcatVới mức ngân sách 20 - 30 triệu đồng trong năm 2026, các bạn sinh viên và dân văn phòng có thể tìm thấy nhiều lựa chọn cao cấp, mạnh mẽ, pin “trâu”, đặc biệt là các mẫu laptop AI hỗ trợ cho học tập và làm việc.
Trong phân...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:25 -
-
bởi theidiotcatDưới đây là một số mẫu laptop nổi bật trong phân khúc dưới 20 triệu giúp các bạn văn phòng, sinh viên và đặc biệt là tân sinh viên có thể dễ dàng lựa chọn được mẫu laptop phù hợp với nhu cầu và ngân sách của mình.
Thị...-
Channel: Đánh giá sản phẩm DTVN
26-06-2026, 10:07 -
-
bởi theidiotcatViệc chọn mua một bộ máy tính phục vụ cho các nhu cầu làm việc văn phòng và sử dụng cơ bản hàng ngày đang trở nên dễ dàng và tiết kiệm hơn bao giờ hết. Thay vì phải đau đầu trích ngân sách để mua cả vi xử lý lẫn card đồ họa rời...
-
Channel: Đánh giá sản phẩm DTVN
25-06-2026, 11:23 -
-
bởi theidiotcatViệc nâng cấp từ một dàn máy tính cũ lên cấu hình mới luôn khiến nhiều người đắn đo về mức chi phí bỏ ra. Nếu bạn đang tìm kiếm một sự lột xác hoàn toàn về hiệu năng mà vẫn cân đối được dòng tiền, combo giữa vi xử lý Ryzen...
-
Channel: Đánh giá sản phẩm DTVN
25-06-2026, 11:06 -
-
Trả lời cho Lực dọc trục làm hỏng ổ bi.bởi nguyendinhvanVí dụ một trang như thế này
...-
Channel: Điện tử công suất
24-06-2026, 19:57 -
-
Trả lời cho Lực dọc trục làm hỏng ổ bi.bởi nguyendinhvanỔ bi có loại chịu lực dọc, loại chịu lực ngang.
Bạn kiếm một quyển Data cũng một hãng vòng bi nào đó. Họ sẽ cấp cho bạn đủ thông số kỹ thuật.
Khi lựa chọn được mã sản phẩm, bạn chỉ việc tìm mua mã đó, hoặc đặt hàng....-
Channel: Điện tử công suất
24-06-2026, 19:52 -
-
bởi GargiChào mọi người, tôi đang gặp một vấn đề kỹ thuật và muốn được nghe ý kiến của mọi người.
Tôi đã lắp một đĩa xích vào trục đầu ra của hộp số hành tinh bánh răng xoắn dùng cho truyền động xích. Sau vài tháng hoạt động, ổ bi đầu ra bị hỏng.
Bản thân...-
Channel: Điện tử công suất
24-06-2026, 13:22 -
-
bởi vi van phamSau hàng chục năm, không biết có ai còn nghĩ gì về tôi? Riêng tôi, nhớ nhiều về dientuviet nam. net. Ngày ấy tìm 1 người bạn đam mê về điện từ khó như trúng số độc đăc. Tôi đã trúng số độc đắc khi được mời về dientuvietnam.net...
-
Channel: Tâm tình dân kỹ thuật
23-06-2026, 22:43 -

...
Comment